#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,ans;
bool f[30][30];
void dfs(int x,int y,int z)
{
	if(y==m+1)
	{
		x++;
		y=1;
	}
	if(z==a)
	{
		ans++;  
		return;
	}
	if(x==n+1)
	    return;
	if(f[x][y])
	    dfs(x,y+1,z);
	else
	{
		if(!f[x][y+1]&&y+1<=m)
		{
			f[x][y+1]=true;
		    dfs(x,y+2,z+1);
		    f[x][y+1]=false;
		}
		if(!f[x+1][y]&&x+1<=n)
		{
		    f[x+1][y]=true;
		    dfs(x,y+1,z+1);
		    f[x+1][y]=false;
		}
		dfs(x,y+1,z);
	}
}
int main()
{
	
	scanf("%d%d%d%d",&n,&m,&a,&b);
	dfs(1,1,0);
	cout<<ans;
	return 0;
}
#include <bits/stdc++.h>

#define fi first
#define se second
#define ll long long
#define dl double long

using namespace std;

const int N = 1e6 + 7;
const long long mod = 1e9 + 7;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int n,m;
int a,b;
int c[20];
ll d[(1 << 16)];
ll nd[(1 << 16)];

bool good(int x, int y)
{
    int cnt = 0;
    for(int i = 0; i < m; i++){
        int x1 = ((x >> i) & 1);
        int y1 = ((y >> i) & 1);
        if(y1 == 0){
            if(cnt)return false;
        }
        if(x1 == 0 && y1 == 0)return false;
        if(x1 == 0){
            if(cnt)return false;
        }else if(y1 == 1){
            cnt ^= 1;
        }
    }
    if(cnt)return false;
    return true;
}

void solve()
{
    cin >> n >> m >> a >> b;
    if(n < m)swap(n, m);
    int x = n * m;
    ll ans = 0;
    for(int i = 0; i < (1 << x); i++){
        if(__builtin_popcount(i) != b)continue;
        for(int j = 0; j < n; j++)c[j] = 0;
        for(int j = 0; j < x; j++){
            if(((i >> j) & 1)){
                c[j / m] |= (1 << j % m);
            }
        }
        for(int j = 0; j < (1 << m); j++)nd[j] = d[j] = 0;
        nd[(1 << m) - 1] = 1;
        for(int j = 0; j < n; j++){
            for(int h = 0; h < (1 << m); h++ ){
                if(j > 0 && (h & c[j - 1]) != c[j - 1])continue;
                for(int g = 0; g < (1 << m); g++){
                    if((g & c[j]) != c[j])continue;
                    int nh = h;
                    int ng = (g ^ c[j]);
                    if(good(nh, ng)){
                        d[g] += nd[h];
                    }
                }
            }
            for(int h = 0; h < (1 << m); h++){
                nd[h] = d[h];
                d[h] = 0;
            }
        }
       ans += nd[(1 << m) - 1];
    }
    cout << ans;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen( "input.txt" , "r" , stdin );
    //freopen( "output.txt" , "w" , stdout );

    int T = 1;
    //cin >> T;
    while( T-- ){
        solve();
    }
}
