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 PYTHON3):

Solution:
def binary_search(arr, start, end, x):
    if (end < start):
        # Element is not present in the array
        return -1
    else:
        mid = start + (end - start) // 2
        # If element is present at the middle
        if (arr[mid] == x):
            return mid
        # If element is smaller than mid
        elif (arr[mid] > x):
            return binary_search(arr, start, mid - 1, x)
        # Else the element greater than mid
        else:
            return binary_search(arr, mid + 1, end, x)


n = int(input())
total, num, c1, c2, mem = n * 2, 2, 2, 3, [2]

while (c1 * c2 < total):
    mem.append(c1 * c2)
    c1 += 1
    c2 += 1


for i in mem:
    if binary_search(mem, 0, len(mem) - 1,total - i) != -1:
        exit(print('YES'))

print('NO')