// Slower C++ solution:
#include<cstdio>

#include<algorithm>

using namespace std;

#define mod 1000000007

using namespace std;

typedef long long LL;

LL je[200010];

LL x,y;

void Build()

{

	je[0]=je[1]=1;

	for(int i=1;i<=200005;i++)

		je[i]=(je[i-1]*i)%mod;

	return;

}

LL Gcd(LL a, LL b, LL &x, LL &y)

{

    if(b==0)

	{

        x=1;

        y=0;

        return a;

    }

    LL gcd=Gcd(b,a%b,x,y);

    LL tmp=x;

    x=y;

    y=tmp-(a/b)*y;

    return gcd;

}

LL C(LL m,LL n)

{

    Gcd(je[m]*je[n-m]%mod,mod,x,y);

    return je[n]*(x+mod)%mod;

}

int main()

{

    LL H,W,A,B;

	Build();

    LL ans=0;

	scanf("%lld%lld%lld%lld",&H,&W,&A,&B);

    for(LL i=B+1;i<=W;i++)

    {

        LL tmp=(C(H-A-1,i-1+H-A-1)*C(W-i,W-i+A-1))%mod;

        ans=(ans+tmp)%mod;

    }

    printf("%lld",ans);

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.7993911368942888x):
#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;

}