#include <iostream>
#include <algorithm>
using namespace std;
struct Node
{
int a, b;
};
Node fx[15] = { (1, -2), (2, -1), (2, 1), (1, 2), (-1, -2), (-2, -1), (-2, 1), (-1, 2) };
long long dp[25][25];
int main()
{
int n, m, n2, m2;
cin >> n >> m >> n2 >> m2;
n += 2;
m += 2;
n2 += 2;
m2 += 2;
for (register int i = 1; i <= 8; i++)
{
fx[i].a += n2 - 2;
fx[i].b += m2 - 2;
}
dp[0][0] = 1;
for (register int i = 0; i <= n; i++)
{
for (register int j = 0; j <= m; j++)
{
if (i == 0 && j == 0) continue;
if (i == 0)
{
dp[i][j] += dp[i][j - 1];
}
else if (j == 0)
{
dp[i][j] += dp[i - 1][j];
}
else dp[i][j] += max(dp[i][j], dp[i - 1][j] + dp[i][j - 1]);
if (i == n2 - 2 && j == m2 - 2)
{
dp[i][j] = 0;
continue;
}
for (register int x = 1; x <= 8; x++)
{
if (i == fx[x].a && j == fx[x].b)
{
dp[i][j] = 0;
break;
}
}
}
}
cout << dp[n - 2][m - 2] << endl;
//system("pause");
return 0;
}