@staticmethod
def d():
    (h, w, a, b) = map(int, sys.stdin.read().split())
    combinatorics = Combinatorics(n=(2 * (10 ** 5)), mod=MOD)
    tot = combinatorics.mod_choose(((h + w) - 2), (h - 1))
    i = np.arange((h - a), h)
    ng = np.sum(((combinatorics.mod_choose(((i + b) - 1), i) * combinatorics.mod_choose(((((h - i) + w) - b) - 2), ((h - 1) - i))) % MOD))
    tot -= ng
    tot %= MOD
    print(tot)
@staticmethod
def d():
    (h, w, a, b) = map(int, sys.stdin.read().split())
    combinatorics = Combinatorics(n=(2 * (10 ** 5)), mod=MOD)
    tot = combinatorics.mod_choose(((h + w) - 2), (h - 1))
    i = np.arange((h - a), h)
    ng = np.sum(((combinatorics.mod_choose(((i + b) - 1), i) * combinatorics.mod_choose(((((h - i) + w) - b) - 2), ((h - 1) - i))) % MOD))
    tot -= ng
    tot %= MOD
    print(tot)