Problem: Haiku is a genre of Japanese traditional poetry.

A haiku poem consists of 17 syllables split into three phrases, containing 5, 7 and 5 syllables correspondingly (the first phrase should contain exactly 5 syllables, the second phrase should contain exactly 7 syllables, and the third phrase should contain exactly 5 syllables). A haiku masterpiece contains a description of a moment in those three phrases. Every word is important in a small poem, which is why haiku are rich with symbols. Each word has a special meaning, a special role. The main principle of haiku is to say much using a few words.

To simplify the matter, in the given problem we will consider that the number of syllable in the phrase is equal to the number of vowel letters there. Only the following letters are regarded as vowel letters: "a", "e", "i", "o" and "u".

Three phases from a certain poem are given. Determine whether it is haiku or not.

Input

The input data consists of three lines. The length of each line is between 1 and 100, inclusive. The i-th line contains the i-th phrase of the poem. Each phrase consists of one or more words, which are separated by one or more spaces. A word is a non-empty sequence of lowercase Latin letters. Leading and/or trailing spaces in phrases are allowed. Every phrase has at least one non-space character. See the example for clarification.

Output

Print "YES" (without the quotes) if the poem is a haiku. Otherwise, print "NO" (also without the quotes).

Examples

Input

on  codeforces 
beta round is running
   a rustling of keys 


Output

YES

Input

how many gallons
of edo s rain did you drink
                                cuckoo


Output

NO

Solution (in JAVA):

Solution:
/*==============================================
Name        : Shadman Shariar                 ||
Email       : shadman.shariar@northsouth.edu  ||
University  : North South University (NSU)    ||
Facebook    : shadman.shahriar.007            ||
==============================================*/
//import java.io.*;
import java.util.*;
//import java.math.BigInteger;
//import java.text.DecimalFormat;

public class Main {

public static Main obj = new Main();
public static Scanner input = new Scanner (System.in);
//public static DecimalFormat df = new DecimalFormat(".00");

public static void main(String[] args) throws Exception {
Scanner input = new Scanner (System.in);
//BigInteger bi1 = new BigInteger("0");	
//StringBuilder sb = new StringBuilder();
boolean jj = true;
 for (int k = 1; k <= 3; k++) {
String s = input.nextLine();

int c = 0; 

for (int i = 0; i < s.length(); i++) {
	
	if(s.charAt(i)=='a'||
			s.charAt(i)=='e'||
			s.charAt(i)=='i'||
			s.charAt(i)=='o'||
			s.charAt(i)=='u') {
		
		c++;
	}
	
}
if (k==1&&c!=5||k==2&&c!=7||k==3&&c!=5) {
	jj = false;
}
 }
 if(jj)System.out.println("YES");
 else System.out.println("NO");
        input.close();
		System.exit(0);
}
public static boolean square(long x)
{
    if (x >= 0) {
        double sr = Math.sqrt(x);
        return ((sr * sr) == x);
    }
    return false;
}
public static boolean cube(long N)
{
    int cube; int c = 0;
    for (int i = 0; i <= N; i++) {
        cube = i * i * i;
        if (cube == N) {
           
            c=1; break;
        }
        else if (cube > N) {
          
           c=0 ; break ;
        }
    }
	if (c==1)return true;
	else return false;
}

public static boolean checkleapyear(int year)
{
    if (year % 400 == 0)
        return true;
    if (year % 100 == 0)
        return false;
    if (year % 4 == 0)
        return true;
    return false;
}

public static boolean[] sieveOfEratosthenes(int n)
{
    boolean prime[] = new boolean[n + 1];
    for (int i = 0; i <= n; i++)
        prime[i] = true;

    for (int p = 2; p * p <= n; p++)
    {
        if (prime[p] == true)
        {
            for (int i = p * p; i <= n; i += p)
                prime[i] = false;
        }
    }
    prime[1]=false;
    return prime;
}

public static boolean issquare(long n) {
	long sqrt=(long) Math.sqrt(n);
	for (int i=(int) Math.max(1, sqrt-5); i<=sqrt+5; i++)
		if (i*i==n)
			return true;
	return false;
}

	public static long sumarray(long a[])
	 {
		
	    long sum=0;
	    for(int i=0;i<a.length;i++)
	    sum+=a[i];
	    return sum;
	 }
	
	public static boolean isperfectsquare(long n) {
        for (long i = 1; i * i <= n; i++) {
 
            if ((n % i == 0) && (n / i == i)) {
                return true;
            }
        }
        return false;
    }
	
	public static int removeduplicateelements(int arr[], int n){ 
		Arrays.sort(arr);
        if (n==0 || n==1){  
            return n;  
        }  
        int[] temp = new int[n];  
        int j = 0;  
        for (int i=0; i<n-1; i++){  
            if (arr[i] != arr[i+1]){  
                temp[j++] = arr[i];  
            }  
         }  
        temp[j++] = arr[n-1];      
        for (int i=0; i<j; i++){  
            arr[i] = temp[i];  
        }  
        return j;  
    }  
	
	public static int fibon(int n) {

		if (n <= 1) {

			return n;
		}
		int[] array = new int[n + 1];
		array[0] = 0;
		array[1] = 1;
		for (int i = 2; i <= n; i++) {
			array[i] = array[i - 2] + array[i - 1];
		}

		return array[n];

	}

	public static long sumofdigits(long n) {
		long sum = 0;

		while (n != 0) {
			sum = sum + n % 10;
			n = n / 10;
		}

		return sum;
	}

	public static int reversedigits(int num) {
		int rev_num = 0;
		while (num > 0) {
			rev_num = rev_num * 10 + num % 10;
			num = num / 10;
		}
		return rev_num;
	}

	public static int binarysearch(int arr[], int l, int r, int x) {

		if (r >= l) {
			int mid = l + (r - l) / 2;
			if (arr[mid] == x)
				return mid;
			if (arr[mid] > x)
				return binarysearch(arr, l, mid - 1, x);
			return binarysearch(arr, mid + 1, r, x);
		}
		return -1;
	}

	public static long gcd(long a, long b) {
		if (a == 0)
			return b;
		return gcd(b % a, a);
	}

	public static long lcm(long a, long b) {
		return (a / gcd(a, b)) * b;
	}

	public static void rangeofprimenumber(int a, int b) {
		int i, j, flag;
		for (i = a; i <= b; i++) {
			if (i == 1 || i == 0)
				continue;
			flag = 1;
			for (j = 2; j <= i / 2; ++j) {
				if (i % j == 0) {
					flag = 0;
					break;
				}
			}
			if (flag == 1)
				System.out.println(i);
		}
	}

	public static boolean isprime(long n) {
		if (n <= 1)
			return false;
		else if (n == 2)
			return true;
		else if (n % 2 == 0)
			return false;
		for (long i = 3; i <= Math.sqrt(n); i += 2) {
			if (n % i == 0)
				return false;
		}
		return true;
	}

	public static int factorial(int n) {
		return (n == 1 || n == 0) ? 1 : n * factorial(n - 1);
	}

	public static int[] reversearrayinrange(int arr[], int start, int end) {
		int temp;

		while (start < end) {
			temp = arr[start];
			arr[start] = arr[end];
			arr[end] = temp;
			start++;
			end--;
		}
		return arr;
	}

}