Problem:
カードゲー ム

「1」から「10」までの数字が書かれたカードが各 1 枚、全部で 10 枚あります。このカードは、表側には数字が書かれ、裏側には何も書かれていません。このカードを使って、あなたと相手の 2 名で以下のルールでゲー ムを行います。

あなたと相手には、表を上にして 1 枚、裏を上にして 1 枚、計 2 枚のカードが配られています。あなたは相手の表のカードの数字を見ることができますが、裏のカードの数字は見えません。

配られたカードの数字の合計が 20 以下で、かつ相手の数字の合計より大きいときに勝ちとなります。
例えば、あなたのカードが「7」「8」 (合計 15) 、相手のカードが「9」「10」 (合計 19) のときは、相手の勝ちです。

あなたと相手は最大であと 1 枚カードを引くことができます。それを引かなくても構いません。

ここで、あと 1 枚のカードを引くかどうかを決定する目安として、カードを引いたときに合計が 20 以下に なる確率を考え、その確率が 50% 以上のときはカードを引くこととしましょう。この確率を計算するときには、あなたの 2 枚のカードと相手の表のカードの計3枚のカードの情報を利用することができます。つまり、各カードは 1 枚ずつしかないので、それらのカードを引くことはないことになります。

あなたの 2 枚のカードと相手の表のカードを読み込んで、それぞれについて、あと 1 枚引いたときに合計が 20 以下になる確率が 50% 以上のときは YES、そうでないなら NO を出力するプログラムを作成してください。

Input

入力は複数のデータセットからなります。 1 枚目のあなたのカードの数字を C1 、2 枚目のあなたのカードの数字を C2 、相手の表になっているカードの数字を C3 とすると、各データセットは以下の形式で与えられます。

C1 C2 C3

Output

各データセットに対して、YES または NO を１行に出力して下さい。

Sample Input

1 2 3
5 6 9
8 9 10

Output for the Sample Input

YES
YES
NO

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;
public class Main {
	static Scanner sc = new Scanner(System.in);
	static int c1, c2, c3;
	static int[] number;
	public static void main(String[] args) {
		while(read()){
			solve();
		}
	}
	static boolean read(){
		if(!sc.hasNext()) return false;
		c1 = sc.nextInt(); c2 = sc.nextInt(); c3 = sc.nextInt();
		return true;
	}
	static void solve(){
		number = new int[11];
		for(int i = 0; i < 11; i++)
			number[i] = i;
		number[c1] = 0; number[c2] = 0; number[c3] = 0;
		int my_score = c1 + c2;
		int count = 0;
		if(my_score <= 10){
			System.out.println("YES");
		}else{
			int value = 20 - my_score;
			for(int i = 1; i <= 10; i++){
				if(value <= number[i])
					count++;
			}
			if(count < 4){
				System.out.println("YES");
			}else{
				System.out.println("NO");
			}
		}
	}
}