//过河卒
//dp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mp[30][30];
ll f[30][30]; //
int dir[][2]={{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}};//八个方向
int xx[10]; // 存控制点行
int yy[10]; //存控制点列
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int m,n,x,y;
cin>>n>>m>>x>>y;
n++,m++,x++,y++; //从1行1列开始,避免坐标出现负数
xx[8]=x,yy[8]=y;//马自己所在的位置是一个控制点
for(int i=0;i<8;i++)
if( x+dir[i][0] >=1 && y+dir[i][1] >=1)
xx[i]=x+dir[i][0],yy[i]=y+dir[i][1];
else//如果控制点不在棋盘,不妨存C点
xx[i]=x,yy[i]=y;
for(int i=1;i<= n;i++)
for(int j=1;j<=m;j++)
{
int flag=0;
for(int k=0;k<9;k++)//九个控制点逐个检查
{
if(i==xx[k] && j==yy[k])
{
flag=1;
break;
}
}
if(!flag)
{
if(i== 1 && j==2) f[i][j]=1;//起点相邻的两点要特判
else if(i ==2 && j==1) f[i][j]=1;
else f[i][j]=f[i-1][j]+f[i][j-1];//一般情况用dp
}
}
cout<<f[n][m]<<endl;
}