#include"bits/stdc++.h"
using namespace std;
using ll=long long;
template<class T=ll>inline T in(istream&is=cin){T ret;is>>ret;return ret;}
template<class T,class Size=typename vector<T>::size_type>inline auto vector_2d(Size h,Size w,T v){return vector<vector<T>>(h,vector<T>(w,v));}
template<class P>struct comp_pair_by_second{bool operator()(const P&p1,const P&p2){return p1.second<p2.second||(p1.second==p2.second&&p1.first<p2.first);}};

int main()
{
    ll h=in(),w=in(),a=in(),b=in();
    stack<ll>states;
    states.push(0);
    ll ans=0;
    while(!states.empty()){
        ll s=states.top();states.pop();
        if(__builtin_popcountll(s)==2*a){
            ++ans;
        }else{
            for(ll i=0;i<h;++i){
                for(ll j=0;j<w;++j){
                    if((s&(1<<(i*w+j)))==0){
                        if(i!=h-1&&(s&(1<<((i+1)*w+j)))==0){
                            states.push(s|(1<<(i*w+j))|(1<<((i+1)*w+j)));
                        }
                        if(j!=w-1&&(s&(1<<(i*w+j+1)))==0){
                            states.push(s|(1<<(i*w+j))|(1<<(i*w+j+1)));
                        }
                    }
                }
            }
        }
    }
    cout<<ans/[](ll n){ll ret=1;for(ll i=1;i<=n;++i)ret*=i;return ret;}(a)<<endl;
}

#include<bits/stdc++.h>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define HUGE_NUM 4000000000000000000 //オーバーフローに注意
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;




#define SIZE 2100005


ll fact[SIZE],inv_fact[SIZE];

ll mod_pow(ll x,ll count, ll mod){

	if(count == 0)return 1;
	ll ret = mod_pow((x*x)%mod,count/2,mod);
	if(count%2 == 1){

		ret = (ret*x)%mod;
	}
	return ret;
}

ll extgcd(ll a,ll b,ll &x,ll &y){
	ll d = a;
	if(b != 0){
		d = extgcd(b,a%b,y,x);
		y -= (a/b)*x;
	}else{
		x = 1;
		y = 0;
	}
	return d;
}

ll mod_inverse(ll a,ll m){
    ll x,y;
    extgcd(a,m,x,y);
    return (m+x%m)%m;
}

ll nCk(ll n,ll k){

	if(k > n)return 0;

	ll ret = fact[n]*inv_fact[k];
	ret %= MOD;
	ret *= inv_fact[n-k];

	return ret%MOD;
}

ll nPk(ll n,ll k){

	if(k > n)return 0;

	ll ret = fact[n]*inv_fact[n-k];

	return ret%MOD;
}



int main(){

	fact[0] = 1;
	for(ll i = 1; i < SIZE; i++){
		fact[i] = i*fact[i-1];
		fact[i] %= MOD;
	}
	inv_fact[SIZE-1] = mod_inverse(fact[SIZE-1],MOD);
	for(ll i = SIZE-1; i >= 1; i--){

		inv_fact[i-1] = inv_fact[i]*i;
		inv_fact[i-1] %= MOD;
	}

	ll N,M,K;
	scanf("%lld %lld %lld",&N,&M,&K);

	if(N > M+K){

		printf("0\n");

	}else{

		ll base = nCk(N+M,N);
		ll minus = nCk(N+M,M+K+1);

		printf("%lld\n",(base-minus+MOD)%MOD);
	}

	return 0;
}
