시간 제한 : 1초, 난이도 : 골드 5, 백준 : 2251

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Practice49 {
	
	static int[] Sender = {0, 0, 1, 1, 2, 2};
	static int[] Receiver = {1, 2, 0, 2, 0, 1};
	static boolean visited[][];
	static boolean answer[];
	static int now[];

    
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		now = new int[3]; //A, B, C 물의 양을 저장할 배열
		now[0] = sc.nextInt();
		now[1] = sc.nextInt();
		now[2] = sc.nextInt();
		visited = new boolean[201][201]; //용기의 크기가 최대 200이라 201 
		answer = new boolean[201]; //정답 배열
		
		BFS();
		for(int i = 0; i < answer.length; i++) {
			if(answer[i]) 
				System.out.print(i + " ");
		}
		sc.close();
	}
	
	public static void BFS() {
		Queue<AB> queue = new LinkedList<>();
		queue.add(new AB(0, 0));
		visited[0][0] = true;
		answer[now[2]] = true;
		while(!queue.isEmpty()) {
			AB p = queue.poll();
			int A = p.A;
			int B = p.B;
			int C = now[2] - A - B;
			for(int k = 0; k < 6; k++) {
				int[] next = {A, B, C};
				next[Receiver[k]] += next[Sender[k]];
				next[Sender[k]] = 0;
				if(next[Receiver[k]] > now[Receiver[k]]) {
					next[Sender[k]] = next[Receiver[k]] - now[Receiver[k]];
					next[Receiver[k]] = now[Receiver[k]];
				}
				if(!visited[next[0]][next[1]]) {
					visited[next[0]][next[1]] = true;
					queue.add(new AB(next[0], next[1]));
					if(next[0] == 0) {
						answer[next[2]] = true;
					}
				}
			}
		}
	}

}

class AB{
	int A;
	int B;
	public AB(int A, int B) {
		this.A = A;
		this.B = B;
	}
}