#include<bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N = 3e5;
const LL MOD = 1e9+7;

inline LL dmod(LL x){
	return x%MOD;
}

LL fakto[N+5];

void pre(){
	fakto[0] = 1LL;
	for(int i=1;i<=N;i++){
		fakto[i] = dmod(fakto[i-1]*(LL)(i));
	}
	return;
}

LL fe(LL x, LL y){
	if(y==0) return 1LL;
	LL ret = fe(x,y/2);
	ret = dmod(ret*ret);
	if(y&1){
		ret = dmod(ret*x);
	}
	return ret;
}

LL nCr(LL x, LL y){
	LL tmp = dmod(fakto[y]*fakto[x-y]);
	tmp = fe(tmp,MOD-2);
	tmp = dmod(tmp*fakto[x]);
	return tmp;
}

LL step(int x, int y, int a, int b){
	int dx = a-x;
	int dy = b-y;
	int tot = dx+dy;
	return nCr(tot,dx);
}

int h,w,a,b;
int main(){
	pre();
	cin >> h >> w >> a >> b;
	LL ret = 0LL;
	for(int i=1;i<=h-a;i++){
		LL tmp = step(1,1,i,b);
		tmp = dmod(tmp*step(i,b+1,h,w));
		ret = dmod(ret+tmp);
	}
	cout << ret << endl;
	return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const long long mod=1000000007;
const int maxn=200005;
ll inv[maxn],s[maxn];
int N,n,m,x,y;
ll Pow(ll a,int b)
{
	ll ans=1;
	while(b)
	{
		if(b&1)
			ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans;
}
ll C(int a,int b)
{
	if(a<0||b<0)
		return 1;
	return s[a]*inv[b]%mod*inv[a-b]%mod;
}
int main()
{
	scanf("%d%d",&n,&m);
    scanf("%d%d",&x,&y);
    N=n+m-2;
    s[0]=1;
    for(int i=1;i<=N;i++)
    	s[i]=s[i-1]*i%mod;
    inv[0]=1;
    inv[N]=Pow(s[N],mod-2);
    for(int i=N-1;i>0;i--)
    	inv[i]=inv[i+1]*(i+1)%mod;
    ll ans=0;
    for(int i=y+1;i<=m;i++)
    {
    	ans+=C(n-x+i-2,i-1)*C(x+m-i-1,x-1)%mod;
    	ans%=mod;
	}
	printf("%lld\n",ans);
	return 0;
}