// Slower C++ solution:
#include <bits/stdc++.h>

#define mod 1000000007

#define ll long long

using namespace std;



ll exgcd(ll a, ll b, ll & x, ll & y)

{

	if (b == 0)

	{

		x = 1;

		y = 0;

		return a;

	}

	ll d = exgcd(b, a % b, y, x);

	y -= a / b * x;

	return d;

}

ll inv(ll a, ll MOD)

{

	ll x, y;

	exgcd(a, MOD, x, y);

	x = (x % MOD + MOD) % MOD;

	return x;

}

ll fac[200010];

void init(int p)

{

	fac[0] = 1;

	for (int i = 1; i <= p; i++) fac[i] = fac[i - 1] * i % mod;

}

ll lucas2(ll n, ll m)

{

	ll ret = 1, a, b;

	while (n && m)

	{

		a = n % mod, b = m % mod;

		if (a < b) return 0;

		ret = ret * fac[a] % mod * inv(fac[b] * fac[a - b] % mod, mod) % mod;

		n /= mod, m /= mod;

	}

	return ret;

}

int main()

{

	ll x, y, n, m;



	scanf("%lld%lld%lld%lld", &n, &m, &x, &y);

	ll ans = 0;

	init(200005);

	ll z = y, p = n + m - 2;

	for (ll i = 0; i <= n - x - 1; i++)

	{

		ans = ans + lucas2(z + i - 1, i) * lucas2(p - z - i, n - 1 - i) % mod;

		ans %= mod;

		//printf("1  %lld  %lld\n", i, ans);

	}

	printf("%lld\n", ans);

}

// Faster C++ solution for the same problem (measured speedup: 2.6019819115379783x):
#include <stdio.h>

#include <math.h>

#include <string.h>

#include <algorithm>

#include <iostream>

#include <string>

#include <time.h>

#define sf scanf

#define pf printf

#define lf double

#define ll long long

#define p123 printf("123\n");

#define pn printf("\n");

#define pk printf(" ");

#define p(n) printf("%d",n);

#define pln(n) printf("%d\n",n);

#define s(n) scanf("%d",&n);

#define ss(n) scanf("%s",n);

#define ps(n) printf("%s",n);

#define sld(n) scanf("%lld",&n);

#define pld(n) printf("%lld",n);

#define slf(n) scanf("%lf",&n);

#define plf(n) printf("%lf",n);

#define sc(n) scanf("%c",&n);

#define pc(n) printf("%c",n);

#define gc getchar();

#define re(n,a) memset(n,a,sizeof(n));

#define len(a) strlen(a)

#define LL long long

using namespace std;

#include<vector>

#include<algorithm>

#include <iostream>

#include <math.h>

#define ll long long

using namespace std;

const ll mod = 1e9+7;

//快速幂

ll pow_quick(ll a,ll b){

    ll r = 1,base = a;

    while(b){

        if(b & 1){

            r *= base;

            r %= mod;

        }

        base *= base;

        base %= mod;

        b >>= 1;

    }

    return r;

}

//组合数

ll C(ll n, ll m){

    if(m > n)

        return 0;

    ll ans = 1;

    for(int i=1; i<=m; i++){

        ll a = (n+i-m)%mod;

        ll b = i%mod;

        ans = (ans*(a*pow_quick(b,mod-2)%mod))%mod;

    }

    return ans;

}

//卢卡斯定理

ll Lucas(ll n, ll m){

    if(m == 0)

        return 1;

    return C(n%mod, m%mod)*Lucas(n/mod,m/mod)%mod;

}

ll sum0 = 0;



int main(){

    ll H,W,A,B;

    cin >> H>>W>>A>>B;

    //cout << 15*14*13*12*11*10/6/5/4/3/2/1;

    /*H--;

    W--;

    A--;

    B--;*/



    //10 7 3 4

    //Lucas(H-A+i-2,H-A-1)*Lucas(W-i+A-1,A-1

    //流泪 sum = Lucas(H+W,H);

    ll a = Lucas(H-A+(B+1)-2,H-A-1);

    ll b = Lucas(W-(B+1)+A-1,A-1);

    for(ll i = B+1; i <= W; i ++){

        sum0 += (a*b)%mod;

        sum0 %= mod;

        a *= (H-A+i-2+1);

        a %= mod;

        a *= pow_quick(H-A+i-2-(H-A-1)+1,mod-2);

        a %= mod;

        b *= W-i+A-1-(A-1);

        b %= mod;

        b *= pow_quick(W-i+A-1,mod-2);

        b %= mod;

        //pld(i) pn

        /*if(i % 10 == 0){

            pld(i) pn

        }*/

    }

    /*sum0 += (a*b)%mod;

    sum0 %= mod*/

    cout << (sum0+mod)%mod;





    return 0;

}