#include<fstream>
#include<iostream>
#include<sstream>
#include<vector>
#include<stack>
#include<string>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#include<tuple>
#include<iomanip>
#include<stdio.h>
using namespace std;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
using graph = vector<vector<int>>;
const long long MOD = 1e9 + 7;
const long long INF = 1e18;
using ll = long long;
using P = pair<int, int>;

int h,w;
bool used[16][16];

ll dfs(int i,int j,int a,int b){
   if(a<0||b<0) return 0;
   if(j==w){
     j = 0;i ++;
   }
   if(i==h) return 1;
   if(used[i][j]) return dfs(i,j+1,a,b);

   used[i][j] = true;
   ll res = 0;

   res += dfs(i,j+1,a,b-1);

   if(j+1<w&&!used[i][j+1]){
     used[i][j+1] = true;
     res += dfs(i,j+1,a-1,b);
     used[i][j+1] = false;
   }

   if(i+1<h&&!used[i+1][j]){
     used[i+1][j] = true;
     res += dfs(i,j+1,a-1,b);
     used[i+1][j] = false;
   }
   used[i][j] = false;

 return res;
}

int main(){
    cin >> h >> w;
    int a,b;cin >> a >> b;

    cout << dfs(0,0,a,b) <<endl;
}

#include <bits/stdc++.h>
using namespace std;
#include<limits>
#define endl '\n'
#define ll long long int
#define ld long double
#define fl float
#define vi vector<int>
#define vll vector<ll>
#define sll set<ll>
#define null NULL
#define fast  ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define infinity (ll)100000000000
#define mod (ll)1000000007
#define pb push_back
#define test  ll t; cin >> t; while(t--)
#define srtv(a)sort(a.begin(),a.end())
#define srtrev(a)sort(a.begin(),a.end(),greater<int>())
#define loop(i,n)for(int i=0;i<n;i++)
#define loopx(i,x,n)for(int i=x;i<n;i++)
#define looprev(i,n)for(ll i=n-1;i>=0;i--)
#define lcm(a,b)(a*b/gcd(a,b))
#define max3(a,b,c)max(a,max(b,c))
#define min3(a,b,c)min(a,min(b,c))
#define sz(a)a.size()
#define p1(x)cout<<x<<endl
#define p2(x,y)cout<<x<<" "<<y<<endl
#define p3(x,y,z)cout<<x<<" "<<y<<" "<<z<<endl
#define p4(x,y,z,a)cout<<x<<" "<<y<<" "<<z<<" "<<a<<endl
#define pn1(x)cout<<x<<" "
#define pn2(x,y)cout<<x<<" "<<y<<" "
#define pn3(x,y,z)cout<<x<<" "<<y<<" "<<z<<" "
#define sv(a)loop(i,a.size())cin>>a[i]
#define pv(a)for(auto x:a)cout<<x<<" ";cout<<endl;
#define flush cin.ignore(numeric_limits<streamsize>::max(),'\n')
vll primefactors;vll fact;
void getPrimeFactors(ll n){primefactors.clear();for(ll i=2;i*i<=n;i++){if(n%i==0){primefactors.pb(i);while(n%i==0)n=n/i;}}if(n!=1)primefactors.pb(n);}
int binomialCoeff(int n,int k){int C[n+1][k+1];for(int i=1;i<=n;i++){for(int j=0;j<=k&&j<=i;j++){if(j==0||j==i)C[i][j]=1;else C[i][j]=(C[i-1][j-1]+C[i-1][j]);}}return C[n][k];}//nCk=n-1Ck-1+n-1Ck
ll pwr(ll base,ll exp){if(exp==0)return 1;ll x;if(exp%2==0){x=pwr(base,(exp)/2);return(x*x)%mod;}else{return(base*pwr(base,exp-1))%mod;}}
ll pwrm(ll a,ll b,ll m){a%=m;ll res=1;while(b>0){if(b&1)res=res*a%m;a=a*a%m;b>>=1;}return res;}
int gcd(int a,int b){if(b==0){return a;}return gcd(b,a%b);}
void printstack(stack<int>b){while(!b.empty()){cout<<b.top()<<" ";b.pop();}cout<<endl;}
void getFactorial(ll n){fact.pb(1);for(ll i=1;i<=n;i++)fact.pb((i*1ll*fact[i-1])%mod);}
bool isPrime(ll n){if(n<2)return false;for(ll i=2;i*i<=n;i++)if(n%i==0)return false;return true;}
int fib(int n) {double phi = (1 + sqrt(5)) / 2;return round(pow(phi, n) / sqrt(5));}

//----------------------------------------------Code below----------------------------------------------------------//
//ctrl+a+k+f
vector<vi>c(17,vi(17,0));
int coun=0;
void recursion(int h,int w,int a,int b,int i,int j)
{
    if(i==h)
    {
        if(a==0 && b==0)
        {
            coun++;
        }
        return;
    }
    int x=0;
    if((j+1)%w==0)
    {
        x++;
    }
    if(j+1<w && c[i][j]==0 && c[i][j+1]==0 && a>0)
    {
        c[i][j]=1;c[i][j+1]=1;
        recursion(h,w,a-1,b,i+x,(j+1)%w);
        c[i][j]=0;c[i][j+1]=0;
    }
    if(i+1<h && c[i][j]==0 && c[i+1][j]==0 && a>0)
    {
        c[i+1][j]=1;c[i][j]=1;
        recursion(h,w,a-1,b,i+x,(j+1)%w);
        c[i+1][j]=0;c[i][j]=0;
    }
    if(c[i][j]==0 && b>0)
    {
        c[i][j]=1;
        recursion(h,w,a,b-1,i+x,(j+1)%w);
        c[i][j]=0;
    }
    recursion(h,w,a,b,i+x,(j+1)%w);
}
int main()
{
    fast;
    int h,w;
    int a,b;
    cin>>h>>w>>a>>b;
    recursion(h,w,a,b,0,0);
    p1(coun);
    return 0;
}



