#include<iostream>
using namespace std;
long long solution(int n, int m, int x1, int y1) {
long long**dp=new long long*[n+1];
if (!x1 && !y1) {
return 0;
}
for (int i = 0; i <= n; i++) {
dp[i] = new long long[m + 1];
}
int flag;
dp[0][0] = 1;
for (int i = 0, flag = 1; i <= n; i++) {
if (!flag || i == x1 - 2 && y1 == 1 || i == x1 - 1 && y1 == 2 || i == x1 + 1 && y1 == 2 || i == x1 + 2 && y1 == 1 || i == x1 && !y1) {
dp[i][0] = 0;
}
else {
dp[i][0] = 1;
}
}
for (int j = 0, flag = 1; j <= m; j++) {
if (!flag || x1 == 2 && j == y1 - 1 || x1 == 1 && j == y1 - 2 || x1 == 1 && j == y1 + 2 || !x1 && j == y1||x1==2&&j==y1+1) {
dp[0][j] = 0;
flag = 0;
}
else {
dp[0][j] = 1;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i==x1-2&&(j==y1-1||j==y1+1)||i==x1-1&&(j==y1-2||j==y1+2)||i==x1+2&&(j==y1-1||j==y1+1)||i==x1+1&&(j==y1-2||j==y1+2)||x1==i&&y1==j) {
dp[i][j] = 0;
}
else if(dp[i-1][j]&&dp[i][j-1]) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
else {
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[n][m];
}
int main(){
int n, m, x1, y1;
cin >> n >> m >> x1 >> y1;
cout<<solution(n, m, x1, y1);
}