#include <iostream>
using namespace std;
int H, W, A, B, ans = 0;
void dfs(int i, int bit, int A, int B){
    if(i == H * W) return (void)ans++;
    if(bit & 1 << i) return dfs(i + 1, bit, A, B);
    if(B) dfs(i + 1, bit | 1 << i, A, B - 1);
    if(A){
        if(i % W != W - 1 && ~bit & 1 << (i + 1)) dfs(i + 1, bit | 1 << i | 1 << (i + 1), A - 1, B);
        if(i + W < H * W) dfs(i + 1, bit | 1 << i | 1 << (i + W), A - 1, B);
    }
}
int main(){
    cin >> H >> W >> A >> B;
    dfs(0, 0, A, B);
    cout << ans << endl;
}
#include <bits/stdc++.h>
using namespace std;
long long INF = 1000000000000000000;
int ans = 0;
int H, W;
void dfs(vector<vector<int>> &f, int A){
    if(A == 0) ans++;
    for(int i = 0; i < H; i++){
        for(int j = 0; j < W; j++){
            if(f[i][j] == 0){
                if(i + 1 < H && f[i + 1][j] == 0){
                    f[i][j] = 1;
                    f[i + 1][j] = 1;
                    dfs(f, A - 1);
                    f[i][j] = 0;
                    f[i + 1][j] = 0;
                }
                if(j + 1 < W && f[i][j + 1] == 0){
                    f[i][j] = 1;
                    f[i][j + 1] = 1;
                    dfs(f, A - 1);
                    f[i][j] = 0;
                    f[i][j + 1] = 0;
                }
            }
        }
    }
}
int main(){
    cin >> H >> W;
    int A, B;
    cin >> A >> B;
    vector<vector<int>> f(H, vector<int>(W));
    dfs(f, A);
    int t = 1;
    for(int i = 1; i <= A; i++) t *= i;
    cout << ans / t << endl;
}