#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,a,b;
long long dp[66000][10][20];
int main(){
	cin>>n>>m>>a>>b;
	dp[0][0][0]=1;
	for(int i=1;i<(1<<n*m);i++)
		for(int j=0;j<=a;j++)
			for(int k=0;k<=b;k++){
				if(!j&&!k)continue;
				if(k){
					for(int g=0;g<n*m;g++)
						if(i&(1<<g))dp[i][j][k]+=dp[i^(1<<g)][j][k-1];
				}
				if(j){
					for(int g=m;g<n*m;g++)
						if((i&(1<<g))&&(i&(1<<g-m)))dp[i][j][k]+=dp[i^(1<<g)^(1<<g-m)][j-1][k];
					for(int g=0;g<n*m;g++){
						if(g%m==0)continue;
						if((i&(1<<g))&&(i&(1<<g-1)))dp[i][j][k]+=dp[i^(1<<g)^(1<<g-1)][j-1][k];
					}
				}
			}
	long long s=1;
	for(int i=2;i<=a+b;i++)s*=i;
	printf("%lld\n",dp[(1<<(n*m))-1][a][b]/s);
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
#define pb push_back
#define mp make_pair
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;

const int MAX_N = 17;
int H,W,A,B;

ll rec(int i, int j, int a, int b, bool used[MAX_N][MAX_N])
{
	if(j == W){
		return rec(i+1,0,a,b,used);
	}
	if(i == H){
		if(a==A && b==B) return 1;
		else return 0;
	}
	if(used[i][j]) return rec(i,j+1,a,b,used);
	ll res = 0;
	if(a < A){
		used[i][j]=true;
		if(i+1<H && !used[i+1][j]){
			used[i+1][j]=true;
			res+=rec(i,j+1,a+1,b,used);
			used[i+1][j]=false;
		}
		if(j+1<W && !used[i][j+1]){
			used[i][j+1]=true;
			res+=rec(i,j+1,a+1,b,used);
			used[i][j+1]=false;
		}
	}
	if(b < B){
		used[i][j]=true;
		res += rec(i,j+1,a,b+1,used);
	}
	used[i][j]=false;
	return res;
}

void solve()
{
	bool used[MAX_N][MAX_N];
	memset(used,false,sizeof(used));
	ll res = rec(0,0,0,0,used);
	cout<<res<<'\n';
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	cin >> H >> W >> A >> B;
	solve();
	return 0;
}