#include <bits/stdc++.h>

using namespace std;

int h, w, a, b, res;

void dfs(int idx, int bt, int a, int b)
{
    if (idx == h * w)
        ++res;
    
    if (bt & (1 << idx))
        dfs(idx + 1, bt, a, b);

    if (b)
        dfs(idx + 1, bt | (1 << idx), a, b - 1);

    if (a)
    {
        if (!(bt & (1 << (idx + 1))) && idx % w < w - 1)
            dfs(idx + 2, bt | (1 << idx) | (1 << (idx + 1)), a - 1, b);
        
        if (idx + w < w * h && !(bt & (1 << (idx + w))))
            dfs(idx + 1, bt | (1 << idx) | (1 << (idx + w)), a - 1, b);
    }
}

int main()
{
    cin.tie(0); ios::sync_with_stdio(false);

    cin >> h >> w >> a >> b;
    dfs(0, 0, a, b);
    cout << res;
}
#include<bits/stdc++.h>
//#include <boost/math/common_factor.hpp>
using namespace std;
 
 // Ordered Set  VSCODE M KAM NI KARRA PATANI KIA DARD HAI
/*#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> ordered_set;
#define os_find(k) find_by_order(k)
#define os_order(k) order_of_key(k)*/
 
 
typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef vector<int> vi;
#define loop(i,a,b) for(int i=a;i<b;i++)
#define loop1(i,a,b) for(int i=a;i<=b;i++)
#define rloop(i,a,b) for(int i=a;i>b;i--)
#define rloop1(i,a,b) for(int i=a;i>=b;i--)
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define pb push_back
//#define mp make_pair
#define pii pair<int,int>
//#define int   long long
#define min_heap priority_queue <int, vector<int>, greater<int> > 
#define ff first
#define ss second
#define ncr(n,r) fact[n]*modInv(fact[r])*modInv(fact[n-r]) 
#define MOD 1000000007
//#define modInv(a) binExp(a,mod-2)
#define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define test int t;cin>>t;while(t--)
#define nl "\n"
#define ceill(a,b) (a/b)+((a%b)!=0)
//-------------------------IMPORTANT FUNCTIONS START---------------------
int powr(int x,  int y) 
{ 
    int res = 1; 
  
    while (y > 0) {  
        if (y & 1) 
            res = res * x;  
        y = y >> 1; 
        x = x * x; 
    } 
    return res; 
} 
 

/*ll power(ll a, ll b, ll mod){
	ll x = 1LL, y = a;
	while (b > 0LL){
		if (b%2LL){
			x = (x*y);
			if(x>mod) x%=mod;
		}
		y = (y*y);
		if(y>mod) y%=mod;
		b /= 2LL;
	}
	return x;
}*/
 
bool isPrime(int n) 
{ 
    // Corner case 
    if (n <= 1) 
        return false; 
  
    // Check from 2 to n-1 
    for (int i = 2; i <=sqrt(n); i++) 
        if (n % i == 0) 
            return false; 
  
 
    return true; 
} 
 
int lcm(int a, int b)
{
    return (a / __gcd(a, b)) * b;
}
//-------------------------IMPORTANT FUNCTIONS END---------------------
// a^b=a+b-2*(a&b)
// for xor same hai to 0 different hai to 1
//gcd(a,b)=gcd(a,b-a)
//gcd(a,b,c)=gcd(a,gcd(b,c))=gcd(gcd(a,b),c)=gcd(a,b-a,c)=gcd(a,c,b-a)=gcd(a,c-a,b-a)
// tin tout concept can be used to find the ancestors of node
// if an array size increases from n to n+1 no.of subarray's increases by n+1
// ceil use karna hai to ceill(a,b) kar
// TLE ya MLE aye to ek bar long long hatake try kar
int func(int x,int y,int h,int w,int arr[17][17],int a1,int b1){
    int sum=0;
    
    if(y>h){
        y=1;
        x++;
    }
    if(x>w)return 1;
    if(arr[x][y]==1){
        sum=0;
        sum+=func(x,y+1,h,w,arr,a1,b1);
        return sum;
    }
    if((x+1)<=w and a1>0){
        int cpy[17][17];
        loop(i,0,17)loop(j,0,17)cpy[i][j]=arr[i][j];
        cpy[x][y]=1;
        cpy[x+1][y]=1;
        //a1--;
        sum+=func(x,y+1,h,w,cpy,a1-1,b1);
    }
    if(y+1<=h and a1>0){
         int cpy[17][17];
        loop(i,0,17)loop(j,0,17)cpy[i][j]=arr[i][j];
        cpy[x][y]=1;
        cpy[x][y+1]=1;
       // a1--;
        sum+=func(x,y+1,h,w,cpy,a1-1,b1);
    }
    if(b1>0){
          int cpy[17][17];
        loop(i,0,17)loop(j,0,17)cpy[i][j]=arr[i][j];
        cpy[x][y]=1;
        
        sum+=func(x,y+1,h,w,cpy,a1,b1-1);
    }
    
    return sum;
}
void solve(){
   int h,w,a1,b1;
   cin>>h>>w>>a1>>b1;
   int arr[17][17];
   memset(arr,0,sizeof(arr));
   cout<<func(1,1,h,w,arr,a1,b1);
} 
 signed  main()
{
 fast

// cout<<fixed<<setprecision(15);
  
    //test
    solve();
 
}