function Main(s) {
	s = s.split(" ").map(a => parseInt(a));
	var h = s[0] - 1;
	var w = s[1] - 1;
	var a = s[2];
	var b = s[3];
	var ans = nCrmod(h - a + w, w);
	for(var i = 1; i <= w - b; i++){
		ans += abmod(nCrmod(h - a + w - i, h - a), nCrmod(i + a - 1, i));
		ans %= mod;
	}
	console.log(ans);
}
function abmod(){
	var rt = arguments[0];
	for(var i = 1; i < arguments.length; i++){
		rt = (rt >>> 16) * arguments[i] % mod * 0x10000 + (rt & 0xFFFF) * arguments[i];
		rt %= mod;
	}
	return rt;
}
function powmod(a,n){//a^n%mod
	var rt = 1;
	while(n){
		if(n & 1) rt = abmod(a, rt);
		a = abmod(a, a);
		n >>>= 1;
	}
	return rt;
}
var mod = 1e9 + 7;
var fact = [1,1,2,6];
var factinv = [1,1];
function factmod(n){
	if(fact[n]) return fact[n];
	for(var i = fact.length; i <= n; i++){
		fact[i] = abmod(fact[i-1], i);
	}
	return fact[n];
}
function factinvmod(n){
	if(!fact[n]) factmod(n);
	factinv[n] = powmod(fact[n], mod-2);
	while(!factinv[n-1]){
		factinv[n-1] = abmod(factinv[n], n--);
	}
}
function nCrmod(n, r){
	if(!factinv[n]) factinvmod(n);
	return abmod(fact[n], factinv[r], factinv[n-r]);
}

Main(require("fs").readFileSync("/dev/stdin", "utf8").trim());