Problem:
Score : 100 points

Problem Statement

Iroha loves Haiku. Haiku is a short form of Japanese poetry. A Haiku consists of three phrases with 5, 7 and 5 syllables, in this order.

To create a Haiku, Iroha has come up with three different phrases. These phrases have A, B and C syllables, respectively. Determine whether she can construct a Haiku by using each of the phrases once, in some order.

Constraints

1≦A,B,C≦10

Input

The input is given from Standard Input in the following format:

A B C

Output

If it is possible to construct a Haiku by using each of the phrases once, print YES (case-sensitive). Otherwise, print NO.

Sample Input 1

5 5 7

Sample Output 1

YES

Using three phrases of length 5, 5 and 7, it is possible to construct a Haiku.

Sample Input 2

7 7 5

Sample Output 2

NO

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <set>
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int minBigger(int i,string& N,string& ans,set<char>& avlb){
	while (i >= 0){
		for (auto& el : avlb){
			if (el > N[i]){
				ans[i] = el;
				return i;
			}
		}
		i--;
	}
}
int main()
{
	set<char> avlb = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
	int K;
	string N;
	cin >> N >> K;
	for (int i = 0; i < K; ++i){
		char t;
		cin >> t;
		avlb.erase(t);
	}
	int len = N.length();
	N = '0' + N;
	string ans;
	ans.resize(len + 1);
	for (int i = 1; i <= len; ++i){
		if (avlb.find(N[i]) == avlb.end()){
			i = minBigger(i, N, ans, avlb);
			int j = i + 1;
			while (j <= len){
				ans[j] = *avlb.begin();
				j++;
			}
		}
		else{
			ans[i] = N[i];
		}
	}
	if (ans[0] == '\0'){ 
		ans=ans.substr(1, len + 1); 
	}
	int ansint = stoi(ans);
	cout << ansint << endl;
	return 0;
}