#include <bits/stdc++.h>
#define REP(i,n) for(ll i=0;i<(ll)(n);i++)
#define REPD(i,n) for(ll i=n-1;i>=0;i--)
#define FOR(i,a,b) for(ll i=a;i<=(ll)(b);i++)
#define FORD(i,a,b) for(ll i=a;i>=(ll)(b);i--)
#define ALL(x) (x).begin(),(x).end()
#define RALL(x) (x).rbegin(),(x).rend()
#define SIZE(x) ((ll)(x).size())
#define MAX(x) *max_element(ALL(x))
#define MIN(x) *min_element(ALL(x))
using namespace std;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
typedef long long ll;
const int INF = 1000000000;

int main() {
    int h, w, a, b;
    cin >> h >> w >> a >> b;
    int ans = 0;
    for (int bit1 = 0; bit1 < (1<<h*(w-1)); ++bit1) {
        vector<vector<bool>> f(h, vector<bool> (w, false));
        bool flag = 1;
        int cnt = 0;
        REP(i, h*(w-1)) {
            if (bit1 & (1<<i)) {
                cnt++;
                if(f[i/(w-1)][i%(w-1)] == 0){
                    f[i/(w-1)][i%(w-1)] = 1;
                }
                else {
                    flag = 0;
                    break;
                }
                
                if(f[i/(w-1)][i%(w-1)+1] == 0){
                    f[i/(w-1)][i%(w-1)+1] = 1;
                }
                else {
                    flag = 0;
                    break;
                }
            }
        }

        if(!flag) continue;
        if(cnt > a) continue;

        int res = cnt;
        for (int bit2 = 0; bit2 < (1<<(h-1)*w); ++bit2) {
            vector<vector<bool>> f2 = f;
            cnt = res;
            flag = 1;
            REP(i, (h-1)*w){
                if (bit2 & (1<<i)) {
                    cnt++;
                    if(f2[i%(h-1)][i/(h-1)] == 0){
                        f2[i%(h-1)][i/(h-1)] = 1;
                    }
                    else {
                        flag = 0;
                        break;
                    }
                    
                    if(f2[i%(h-1)+1][i/(h-1)] == 0){
                        f2[i%(h-1)+1][i/(h-1)] = 1;
                    }
                    else {
                        flag = 0;
                        break;
                    }
                }
            }
            if(flag == 1 && cnt == a) ans++;
        }   
    }
    
    cout << ans << endl;

    return 0;
}
#include <bits/stdc++.h>
using namespace std;

int H, W, A, B;

int dfs(int i, int s, int a, int b) {
    if (i == H * W) {
        if (a == 0 && b == 0) return 1;
        else return 0;
    }

    if (s & (1 << i)) {
        return dfs(i+1, s, a, b);
    }

    int ans = dfs(i+1, (s | (1 << i)), a, b-1);

    if (((i + 1) % W) && ((s & (1 << (i + 1))) == 0)) {
        ans += dfs(i+1, (s | (1 << i) | (1 << (i + 1))), a-1, b);
    }

    if ((i + W < W * H) && ((s & (1 << (i + W))) == 0)) {
        ans += dfs(i+1, (s | (1 << i) | (1 << (i + W))), a-1, b);
    }

    return ans;
}

int main() {
    cin >> H >> W >> A >> B;
    cout << dfs(0, 0, A, B) << endl;
}