#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAX_N = 100;
int n, m;
bool grid[MAX_N][MAX_N];
long long dp[MAX_N][MAX_N];
long long dfs(int x, int y)
{
if (x < 0 || x > n || y < 0 || y > m)
return 0;
if (x == 0 && y == 0)
return 1;
if (grid[x][y])
return 0;
if (dp[x][y] != -1)
return dp[x][y];
dp[x][y] = dfs(x - 1, y) + dfs(x, y - 1);
return dp[x][y];
}
int main()
{
cin >> n >> m;
int a, b;
cin >> a >> b;
grid[a][b] = grid[a - 1][b - 2] = grid[a - 1][b + 2] = grid[a + 1][b - 2] = grid[a + 1][b + 2] = grid[a - 2][b - 1] = grid[a - 2][b + 1] = grid[a + 2][b - 1] = grid[a + 2][b + 1] = 1;
memset(dp, -1, sizeof(dp));
cout << dfs(n, m) << endl;
return 0;
}