#include<stdio.h>
int main()
{
int n,m,x,y,i,j;//要到达的点为(n,m),马的位置为(x,y)
scanf("%d %d %d %d",&n,&m,&x,&y);
int f[20][20];//f[i][j]表示到达点(x,y)的路径数目
int g[20][20]={0};//要记得初始化
g[x][y]=1;//表示此点为马的控制点,不能走
int dx[9]={0,-2,-1,1,2,2,1,-1,-2};//从马的位置可以横向移动的位移
int dy[9]={0,1,2,2,1,-1,-2,-2,-1};//从马的位置可以纵向移动的位置
for(i=1;i<9;i++)
{
if((x+dx[i]>=0)&&(x+dx[i]<=n)&&(y+dy[i]>=0)&&(y+dy[i]<=m))
{
g[x+dx[i]][y+dy[i]]=1;//这些点不能走
}
}
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
{
if(g[i][j]==1)
{
f[i][j]=0;//马控制的点不能走,所以到达这些点的路径数目为0
}
else if(i==0&&j==0)
{
f[i][j]=1;//从(0,0)到(0,0)的数目为1
}
else if(i!=0&&j==0)
{
f[i][j]=f[i-1][j];
}
else if(i==0&&j!=0)
{
f[i][j]=f[i][j-1];
}
else
{
f[i][j]=f[i-1][j]+f[i][j-1];//到达某一点的路径数目,等于到达其相邻的上点和左点的路径数目之和。
}
}
}
printf("%d\n",f[n][m]);
return 0;
}