//状态表示 f[i][j]表示 走到(i,j)的集合;
// 属性:方案数;
// 计算 f[i-1][j]+f[i][j-1];
//坑点: 爆int ,而且范围还不会计算,一遍遍试,积累经验;
// 有 f[i-1][j],f[i][[j-1]; 题目从(0,0)开始
// 会数组越界;
//马本身也不能走;
//巧妙:有马可到的地方 f[i][j]置为0;退出,不更新;
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=1010;
int n,m,x2,y2;
long long f[N][N];
int dx[]={-2,-2,-1,-1,1,1,2,2};
int dy[]={-1,1,-2,2,-2,2,-1,1};
bool st[N][N];
int main()
{
cin>>n>>m>>x2>>y2;
for(int i=0;i<8;i++)
{
int a=dx[i]+x2+1;
int b=dy[i]+y2+1;
if(a>0&&b>0)
st[a][b]=true;
}
st[x2+1][y2+1]=true;
f[1][0]=1;
for(int i=1;i<=n+1;i++)
for(int j=1;j<=m+1;j++)
{
if(st[i][j])
{
f[i][j]=0;
continue;
}
f[i][j]=f[i-1][j]+f[i][j-1];
}
cout<<f[n+1][m+1]<<endl;
return 0;
}