Problem: As you very well know, this year's funkiest numbers are so called triangular numbers (that is, integers that are representable as <image>, where k is some positive integer), and the coolest numbers are those that are representable as a sum of two triangular numbers.

A well-known hipster Andrew adores everything funky and cool but unfortunately, he isn't good at maths. Given number n, help him define whether this number can be represented by a sum of two triangular numbers (not necessarily different)!

Input

The first input line contains an integer n (1 ≤ n ≤ 109).

Output

Print "YES" (without the quotes), if n can be represented as a sum of two triangular numbers, otherwise print "NO" (without the quotes).

Examples

Input

256


Output

YES


Input

512


Output

NO

Note

In the first sample number <image>.

In the second sample number 512 can not be represented as a sum of two triangular numbers.

Solution (in JAVA):

Solution:
import java.util.Scanner;


public class Funky_numbers
{
	
	public static int bin_search(int arr[], long find, int low, int high)
	{
		int middle = (int)(low + high)/2;

		if (low > high) 
			return -1;

		if (arr[middle] < find) 
			return bin_search (arr, find, middle+1, high);
		
		else if (arr[middle]>find) 
			return bin_search (arr,find,low, middle-1);
		
		else 
			return 1;
	} 

	public static void funky (int n)
	{
		int cnt = 1;

		while (cnt*(cnt+1)/2<=n)
		{
			cnt++;
		}
		
			int [] niz = new int [cnt+1];
		
			niz[1] = 1;
			
			for (int j = 2; j<=cnt; j++)
			{
				niz [j] = niz [j-1] + j;
			}
			
			int find;
			
			for (int i = 1; i<=cnt; i++)
			{
				find = n - niz[i];
				
				if (bin_search (niz, find, i, cnt)==1)
					{
						System.out.println("YES");
						return;
					}
			}
			System.out.println("NO");
	}
	
	public static void main(String[] args) 
	{
		Scanner s = new Scanner (System.in);
		int n = s.nextInt();
		funky (n);
	}

}