/*
很明显动态转移方程f[i][j]表示从(0,0)到(n,m)的方案数;
f[i][j]=f[i-1][j]+f[i][j-1](先处理马的位置)
f[0][0]=1;
*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
const int M=105;
int f[M][M];
int map[M][M];
int s, t;
int ms, mt;
void solve()
{
f[0][0]=1;
for(int i=0; i<=s; i++)
for(int j=0; j<=t; j++)
{
if (map[i][j]) f[i][j]=0;
else {
if (i-1>=0 && !map[i-1][j])
f[i][j]+=f[i-1][j];
if (j-1>=0 && !map[i][j-1])
f[i][j]+=f[i][j-1];
}
}
printf("%d", f[s][t]);
}
void init()
{
scanf("%d %d %d %d", &s, &t, &ms, &mt);
memset(f, 0, sizeof(f));
memset(map, 0, sizeof(map));
map[ms][mt]=1;
map[ms-2][mt-1]=1;map[ms-1][mt-2]=1;map[ms+1][mt-2]=1;map[ms+2][mt-1]=1;
map[ms+2][mt+1]=1;map[ms+1][mt+2]=1;map[ms-1][mt+2]=1;map[ms-2][mt+1]=1;
}
int main()
{
init();
solve();
return 0;
}