def p_d():

    x, y = list(map(int, input().split()))

    if y > x:

        x, y = y, x

    if (x + y) % 3 != 0:

        print((0))

        exit()

    if x - y > (x + y) // 3:

        print((0))

        exit()

    x, y = x - (x + y) // 3, y - (x + y) // 3



    mod = 10 ** 9 + 7  # 出力の制限

    N = x + y

    g1 = [1, 1]  # 元テーブル

    g2 = [1, 1]  # 逆元テーブル

    inverse = [0, 1]  # 逆元テーブル計算用テーブル



    for i in range(2, N + 1):

        g1.append((g1[-1] * i) % mod)

        inverse.append((-inverse[mod % i] * (mod // i)) % mod)

        g2.append((g2[-1] * inverse[-1]) % mod)



    def cmb(n, r, mod):

        if (r < 0 or r > n):

            return 0

        r = min(r, n - r)

        return g1[n] * g2[r] * g2[n - r] % mod



    print((cmb(x + y, y, mod)))

    

p_d()
def p_d():

    x, y = list(map(int, input().split()))

    if y > x:

        x, y = y, x

    if (x + y) % 3 != 0:

        print((0))

        exit()

    if x - y > (x + y) // 3:

        print((0))

        exit()

    x, y = x - (x + y) // 3, y - (x + y) // 3



    def c_mod(n, r, mod=10 ** 9 + 7):

        n1, r = n + 1, min(r, n - r)

        numer = denom = 1

        for i in range(1, r + 1):

            numer = numer * (n1 - i) % mod

            denom = denom * i % mod

        return numer * pow(denom, mod - 2, mod) % mod



    print((c_mod(x + y, y)))

    

p_d()
def p_d():
    x, y = list(map(int, input().split()))
    if y > x:
        x, y = y, x
    if (x + y) % 3 != 0:
        print((0))
        exit()
    if x - y > (x + y) // 3:
        print((0))
        exit()
    x, y = x - (x + y) // 3, y - (x + y) // 3
    mod = 10**9 + 7  # 出力の制限
    N = x + y
    g1 = [1, 1]  # 元テーブル
    g2 = [1, 1]  # 逆元テーブル
    inverse = [0, 1]  # 逆元テーブル計算用テーブル
    for i in range(2, N + 1):
        g1.append((g1[-1] * i) % mod)
        inverse.append((-inverse[mod % i] * (mod // i)) % mod)
        g2.append((g2[-1] * inverse[-1]) % mod)

    def cmb(n, r, mod):
        if r < 0 or r > n:
            return 0
        r = min(r, n - r)
        return g1[n] * g2[r] * g2[n - r] % mod

    print((cmb(x + y, y, mod)))


p_d()

def p_d():
    x, y = list(map(int, input().split()))
    if y > x:
        x, y = y, x
    if (x + y) % 3 != 0:
        print((0))
        exit()
    if x - y > (x + y) // 3:
        print((0))
        exit()
    x, y = x - (x + y) // 3, y - (x + y) // 3

    def c_mod(n, r, mod=10**9 + 7):
        n1, r = n + 1, min(r, n - r)
        numer = denom = 1
        for i in range(1, r + 1):
            numer = numer * (n1 - i) % mod
            denom = denom * i % mod
        return numer * pow(denom, mod - 2, mod) % mod

    print((c_mod(x + y, y)))


p_d()

-    mod = 10**9 + 7  # 出力の制限 -    N = x + y -    g1 = [1, 1]  # 元テーブル -    g2 = [1, 1]  # 逆元テーブル -    inverse = [0, 1]  # 逆元テーブル計算用テーブル -    for i in range(2, N + 1): -        g1.append((g1[-1] * i) % mod) -        inverse.append((-inverse[mod % i] * (mod // i)) % mod) -        g2.append((g2[-1] * inverse[-1]) % mod) -    def cmb(n, r, mod): -        if r < 0 or r > n: -            return 0 -        r = min(r, n - r) -        return g1[n] * g2[r] * g2[n - r] % mod +    def c_mod(n, r, mod=10**9 + 7): +        n1, r = n + 1, min(r, n - r) +        numer = denom = 1 +        for i in range(1, r + 1): +            numer = numer * (n1 - i) % mod +            denom = denom * i % mod +        return numer * pow(denom, mod - 2, mod) % mod -    print((cmb(x + y, y, mod))) +    print((c_mod(x + y, y)))