#include<iostream>
using namespace std;
long B[21][21];//定义棋盘
int main(){
int n,m;//目标点的坐标
int a,b;//马所在点的坐标
cin>>n>>m>>a>>b;
//初始化棋盘:假设到达目标点(n,m)前每个点都可以通行设置成1
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
B[i][j]=1;
//将马控制的点设置成0,代表不能通过
//控制马上边的4个点,只要不超过边届,则为控制点
if(a-2>=0&&b-1>=0)
B[a-2][b-1]=0;
if(a-2>=0&&b+1<=m)
B[a-2][b+1]=0;
if(a-1>=0&&b-2>=0)
B[a-1][b-2]=0;
if(a-1>=0&&b+2<=m)
B[a-1][b+2]=0;
//马下边的4个点,只要不超过边届,则为控制点
if(a+1<=n&&b-2>=0)
B[a+1][b-2]=0;
if(a+2<=n&&b-1>=0)
B[a+2][b-1]=0;
if(a+1<=n&&b+2<=m)
B[a+1][b+2]=0;
if(a+1<=n&&b+1<=m)
B[a+2][b+1]=0;
//马所在点不能
B[a][b]=0;
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
//如果可行
if(B[i][j]){
if(i==0&&j==0)
continue;
else if(i==0)
B[i][j]=B[i][j-1]; //目标点在最上面一行的时候
else if(j==0)
B[i][j]=B[i-1][j];//目标点在最左边一行
else
B[i][j]=B[i-1][j]+B[i][j-1];//到达目标点路径=上点路径+左点路径
}
}
}
cout<<B[n][m]<<endl;
}
/**************************************************************
Problem: 1224
User: admin
Language: C++
Result: Accepted
Time:11 ms
Memory:2076 kb
****************************************************************/