#include "bits/stdc++.h"
using namespace std;

#define rep(i,n) for(int i = 0; i < (n); ++i)
#define srep(i,s,t) for(int i = s; i < t; ++i)
#define drep(i,n) for(int i = (n)-1; i >= 0; --i)
#define ALL(a)  (a).begin(),(a).end()

typedef long long int ll;
typedef string str;
typedef pair<ll, ll> P;
using Graph = vector<vector<int>>;

const int dy[] = { 0, 0, 1, -1 }, dx[] = { 1, -1, 0, 0 };
const ll INFL = 1ll << 60, INF = 1 << 30, mod = 1e9 + 7;
ll h, w, a, b; ll sum = 0;

ll solve(ll temp, ll ya, ll xa, ll e, vector<vector<ll>> v) {

	if (e == 0) { sum++; return 0; }

	if (temp == 1) { v[ya][xa] = 1; v[ya][xa + 1] = 1; }
	if (temp == 2) { v[ya][xa] = 1; v[ya + 1][xa] = 1; }

	rep(i, h) {
		rep(j, w) {
			if (j + 1 < w)if ((v[i][j] | v[i][j + 1]) == 0)solve(1, i, j, e - 1, v);
			if (i + 1 < h)if ((v[i][j] | v[i + 1][j]) == 0)solve(2, i, j, e - 1, v);
		}
	}

	return 0;
}

int main() {
	//Code Line
	ll k=1;
	cin >> h >> w >> a >> b;
	vector<vector<ll>> v(h,vector<ll>(w,0));
	solve(0,0,0,a,v);
	srep(i, 1, a + 1)k *= i;
	cout << sum / k << endl;
	return 0;
}

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double


int h,w,a,b;

ll ans = 0;

vector < vector <int> > arr;

unordered_map <string, ll > mp;



int cal(int x,int y,int a,int b,vector < vector <int> > &arr, ll mask)
{

    string s=to_string(x)+" "+to_string(y)+" "+to_string(a)+" "+to_string(b)+" "+to_string(mask);

    //cout<<" AAO MERE GAO ME BHAI LOG "<<s<<endl;

   int ans=0;


   if(mp.find(s)!=mp.end())
    return mp[s];

    if(y==w)
       return  mp[s]=cal(x+1,0,a,b,arr,mask);
    if(x==h)
    {
        if(a==b&&a==0)
        return mp[s]=1;
        return mp[s]=0;
    }

    if(arr[x][y]==1)
        return mp[s]=cal(x,y+1,a,b,arr,mask);


    //take one

    if(b)
    {
    arr[x][y]=1;
    ans+=cal(x,y+1,a,b-1,arr,(mask)|(1<<(x*w+y)));
    arr[x][y]=0;
    }


    if(a&&y+1<w&&(arr[x][y+1]==0))
    {

        arr[x][y]=1;
        arr[x][y+1]=1;

        ans+=cal(x,y+1,a-1,b,arr,(mask)|(1<<(x*w+y))|(1<<(x*w+y+1)));

        arr[x][y+1]=0;
        arr[x][y]=0;

    }



     if(a&&x+1<h&&(arr[x+1][y]==0))
    {

        arr[x][y]=1;
        arr[x+1][y]=1;

        ans+=cal(x,y+1,a-1,b,arr,(mask)|(1<<(x*w+y))|(1<<(((x+1)*w)+y)));

        arr[x+1][y]=0;
        arr[x][y]=0;

    }

    mp[s]=ans;


   // cout<<" anas is "<<ans<<endl;

    return ans;





}





int main()
{
   int t=1;
 //  cin>>t;



   while(t--)
   {


     cin>>h>>w>>a>>b;

     arr.resize(h,(vector <int> (w,0)));


     cout<<cal(0,0,a,b,arr,0)<<endl;


     //cout<<ans<<endl;





   }




  return 0;

}
