C = int(1e9) + 7

h, w, a, b = [int(x) for x in input().split()]



# 1000000005 = 2^29 + 2^28 + 2^27 + 2^25 + 2^24 + 2^23 + 2^20 + 2^19 + 2^17 + 2^15 + 2^14 + 2^11 + 2^9 + 2^2 + 1



def pow(n):

    ans = n

    for i in range(1, 30):

        n = (n * n) % C

        if i in {29, 28, 27, 25, 24, 23, 20, 19, 17, 15, 14, 11, 9, 2}:

            ans = (ans * n) % C

    return ans



fact = [1]

factinv = [1] # dummy

for x in range(1, h + w - 2):

    fact.append((x * fact[x - 1]) % C)

    # factinv.append(pow(x)) # <- this won't work, why?

    factinv.append((pow(x) * factinv[x - 1]) % C)



def nCr(n, r):

    return (fact[n] * factinv[r] * factinv[n - r]) % C



ans = 0

for i in range(b, w):

    ans = (ans + nCr(i + h - a - 1, h - a - 1) * nCr(a - 1 + w - i - 1, a - 1)) % C



print(ans)

C = int(1e9) + 7

h, w, a, b = [int(x) for x in input().split()]



fact = [1]

for x in range(1, h + w - 2):

    fact.append((x * fact[x - 1]) % C)



factinv = [1] * (h + w - 2)

factinv[h + w - 3] = pow(fact[h + w - 3], C - 2, C)

for x in reversed(list(range(2, h + w - 3))):

    factinv[x] = (factinv[x + 1] * (x + 1)) % C



def nCr(n, r):

    return (fact[n] * factinv[r] * factinv[n - r]) % C



ans = 0

for i in range(b, w):

    ans = (ans + nCr(i + h - a - 1, h - a - 1) * nCr(a - 1 + w - i - 1, a - 1)) % C



print(ans)

C = int(1e9) + 7
h, w, a, b = [int(x) for x in input().split()]
# 1000000005 = 2^29 + 2^28 + 2^27 + 2^25 + 2^24 + 2^23 + 2^20 + 2^19 + 2^17 + 2^15 + 2^14 + 2^11 + 2^9 + 2^2 + 1
def pow(n):
    ans = n
    for i in range(1, 30):
        n = (n * n) % C
        if i in {29, 28, 27, 25, 24, 23, 20, 19, 17, 15, 14, 11, 9, 2}:
            ans = (ans * n) % C
    return ans


fact = [1]
factinv = [1]  # dummy
for x in range(1, h + w - 2):
    fact.append((x * fact[x - 1]) % C)
    # factinv.append(pow(x)) # <- this won't work, why?
    factinv.append((pow(x) * factinv[x - 1]) % C)


def nCr(n, r):
    return (fact[n] * factinv[r] * factinv[n - r]) % C


ans = 0
for i in range(b, w):
    ans = (ans + nCr(i + h - a - 1, h - a - 1) * nCr(a - 1 + w - i - 1, a - 1)) % C
print(ans)

C = int(1e9) + 7
h, w, a, b = [int(x) for x in input().split()]
fact = [1]
for x in range(1, h + w - 2):
    fact.append((x * fact[x - 1]) % C)
factinv = [1] * (h + w - 2)
factinv[h + w - 3] = pow(fact[h + w - 3], C - 2, C)
for x in reversed(list(range(2, h + w - 3))):
    factinv[x] = (factinv[x + 1] * (x + 1)) % C


def nCr(n, r):
    return (fact[n] * factinv[r] * factinv[n - r]) % C


ans = 0
for i in range(b, w):
    ans = (ans + nCr(i + h - a - 1, h - a - 1) * nCr(a - 1 + w - i - 1, a - 1)) % C
print(ans)

-# 1000000005 = 2^29 + 2^28 + 2^27 + 2^25 + 2^24 + 2^23 + 2^20 + 2^19 + 2^17 + 2^15 + 2^14 + 2^11 + 2^9 + 2^2 + 1 -def pow(n): -    ans = n -    for i in range(1, 30): -        n = (n * n) % C -        if i in {29, 28, 27, 25, 24, 23, 20, 19, 17, 15, 14, 11, 9, 2}: -            ans = (ans * n) % C -    return ans - - -factinv = [1]  # dummy -    # factinv.append(pow(x)) # <- this won't work, why? -    factinv.append((pow(x) * factinv[x - 1]) % C) +factinv = [1] * (h + w - 2) +factinv[h + w - 3] = pow(fact[h + w - 3], C - 2, C) +for x in reversed(list(range(2, h + w - 3))): +    factinv[x] = (factinv[x + 1] * (x + 1)) % C