//过河卒
//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;
}