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.ArrayList;
import java.util.List;
import java.util.Scanner;


public class FunkyNumbers {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		long n = scanner.nextLong();
		if(n<2)
		{
			System.out.println("NO");
			return;
		}
		long k=1;
		long s=0;
		List<Long> numbers = new ArrayList<Long>();
		while(s<n) {
			s=(k+1)*k;
			if(s%2==0) {
				numbers.add(s/2);
			}
			s/=2;	
			k++;
		}
		int end= numbers.size();
		int start=0;
		int mid=start + (end-start)/2;
		long numOfMid = 0L;
//		System.out.println(numbers);
		boolean funky = false;
		while(start<end) {
			 numOfMid = numbers.get(mid);
			if(numOfMid > n)	end = mid-1;
			else if(numOfMid <n) start = mid+1;
			else {				
				break;
			}
			mid=start + (end-start)/2;
		}	
		start=0;
		numOfMid = numbers.get(mid);
		long numOfStart = numbers.get(start);
		long sum=0;
		while(mid>=start) {
			sum = numOfMid+numOfStart;
			if(sum == n) {
				funky =true;
				break;
			}
			if(sum>n ) {
				mid--;
			}else {
				start++;
			}
			numOfMid = numbers.get(mid);
			numOfStart = numbers.get(start);
		}
		if(funky)
			System.out.println("YES");
		else
			System.out.println("NO");
	}

}