#include <bits/stdc++.h>

using namespace std;

int H, W, A, B, Ans;

void dfs(int p, int bitdp, int rec, int squ) {
  // 終端
  if (p == H * W) {
    Ans++;
    return;
  }
  // すでに利用済み
  if (bitdp & 1 << p) dfs(p + 1, bitdp, rec, squ);
  // 半畳を利用
  if (squ && ~bitdp & 1 << p) dfs(p + 1, bitdp | 1 << p, rec, squ - 1);
  // 畳を利用
  if (rec) {
    // 右へ遷移
    if (p % W != W - 1 && ~bitdp & 1 << (p + 1)) dfs(p + 1, bitdp | 3 << p, rec - 1, squ);
    // 下へ遷移
    if (p + W < H * W) dfs(p + 1, bitdp | 1 << p | 1 << (p + W), rec - 1, squ);
  }
}

int main() {
  cin >> H >> W >> A >> B;
  dfs(0, 0, A, B);
  cout << Ans << endl;
}
#include <bits/stdc++.h>
using namespace std;
const long long mod1 = 1000000007;
using ll = long long;
using pq = priority_queue<ll>;
vector<int> dx = {0,1,0,-1};
vector<int> dy = {-1,0,1,0};

long long pow(long long x,long long n){
    long long ans = 1;
    while(n != 0){
        long long a = x;
        long long z = 1;
        while(z*2 <= n){
            a *=a;
            a=a%mod1;
            z*=2;
        }
        ans*=a;
        ans=ans%mod1;
        n-=z;
    }
    return ans; 
}//累乗 x^n

template<typename T>
void input_vec(vector<T> &A,long long N){
    for(int i = 0; i < N; i++){
        cin >> A.at(i);
    }
    return;
}//入力を配列で受け取る

template<typename T>
void output_vec(vector<T> &A,long long N){
    for(int i = 0; i < N; i++){
        if(i != 0){
            cout << " ";
        }
        cout << A.at(i);
    }
    cout << endl;
    return;
}//配列を出力

template<typename T>
long long count_vec(vector<T> &A,T x){
    long long counter = 0;
    for(int i = 0; i < (int)A.size(); i++){
        if(A.at(i) == x){
            counter++;
        }
    }
    return counter;
}//配列内のxの個数をreturn


vector<char> change_vec(string s,int n){
    vector<char> ans(n);
    for(int i = 0; i < n; i++){
        ans.at(i) = s.at(i);
    }
    return ans;
}//文字列を配列に変換

void derete(vector<ll> &a){
    vector<ll> b = a;
    
    ll size = a.size();
    for(int i = 0; i < size; i++){
        b.at(i) = a.at(size-i-1);
    }
    b.pop_back();
    a.pop_back();
    for(int i = 0; i < size-1; i++){
        a.at(i) = b.at(size-i-2);
    }
    return;
}

int main(){
    ll a,b,c; cin >> a >> b >> c;
    if(a == b) cout << a << endl;
    if(a != b) cout << 3-a-b << endl;
    
}
