#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#define MOD 1000000007
typedef long long LL;
using namespace std;
LL H,W,A,B,ans;
LL a[100010],b[100010];
void exgcd(LL a,LL b,LL &x,LL&y)
{
	if(b==0)
	{
		x=1;
		y=0;
		return;
	}
	exgcd(b,a%b,x,y);
	LL tmp=x;
	x=y;
	y=tmp-(a/b)*y;
}
LL C(LL N,LL M)
{
	LL tmp1=1,tmp2=1;
	for(LL i=N-M+1;i<=N;i++) tmp1=(tmp1*i)%MOD;
	for(LL i=1;i<=M;i++) tmp2=(tmp2*i)%MOD;
	LL x,y;
	exgcd(tmp2,MOD,x,y);
	LL ni=x;
	while(ni<0)
	{
		ni=(ni+MOD)%MOD;
	}
	return (tmp1*ni)%MOD;
}
/*LL C(LL N,LL M)
{
	vector<vector< LL > > Combi(N+1,vector<LL> (M+1,0));
	for(LL i=0;i<Combi.size();i++) Combi[0][i]=0;
	for(LL i=0;i<Combi.size();i++) Combi[i][0]=1;
	for(LL i=1;i<=N;i++)
	{
		for(int j=1;j<=(i>M?M:i);j++)
		{
			Combi[i][j]=(Combi[i-1][j-1]+Combi[i-1][j])%MOD;
		}
	}
	return Combi.back().back();
}*/
int main()
{
	while(scanf("%lld%lld%lld%lld",&H,&W,&A,&B)!=EOF)
	{
		ans=0;
		for(LL i=1;i<=H-A;i++)
		{
			LL N=i,M=B;
			a[i]=C(N+M-2,N-1);
			N=H-i+1,M=W-B;
			b[i]=C(N+M-2,N-1);
			ans=(ans+(a[i]*b[i])%MOD)%MOD;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
