//#include"pch.h"
#include<iostream>
#include<math.h>

using namespace std;

#define MODULAR 1000000007

long long fact(long num);
long long getPath(long height, long width);
long long power(long num, long index);


long long factResult[200000] = { 0 };
bool setFact = false;


long long getPath(long height, long width) {
	long long pathsum = height + width;
	long long ans = 1;

	ans = fact(pathsum);

	long heightFact = fact(height);
	long widthFact	= fact(width);

	long long invHeight	= power(heightFact, MODULAR - 2);
	long long  invWidth = power(widthFact, MODULAR - 2);

	ans = (ans * invHeight) % MODULAR;
	ans = (ans * invWidth) % MODULAR;

	return ans;
}

long long power(long num, long index) {
	if (index == 0)return 1;
	else if (index == 1) return num;

	long long base = power(num, index / 2);
	if (index % 2 == 0)return (base * base) % MODULAR;
	else return (((base * base) % MODULAR) * num) % MODULAR;

}

long long fact(long num) {

	if (!setFact) {
		factResult[0] = 1;
		for (int i = 1; i <= (sizeof(factResult)/ sizeof(long long)); i++) {
			factResult[i] = (i * factResult[i - 1]) % MODULAR;
		}
	}

	return factResult[num];
}

	



int main() {
	int h, w, cantH, cantW;
	long long ans = 0;
	cin >> h >> w >> cantH >> cantW;
	/*
	h = 5;
	w = 5;
	cantH = 2;
	cantW = 2;
	*/

	int hmove = h - 1;
	int wmove = w - 1;
	
	for (int i = cantW; i < w; i++) {
		int wk = getPath(hmove - cantH, i);
		wk = (wk * getPath(cantH - 1,wmove - i)) % MODULAR;
		ans += wk;
		ans %= MODULAR;
		if (i % 1000 == 0) {
	//		cout << "i = " << i << endl;
		}
	}



	cout << ans << endl;

//	system("pause");



	return 0;
}