#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <string.h>
#include <algorithm>
#include <functional>
using namespace std;
#define maxn 30
typedef long long ll;
ll n,m,x,y;
ll d[maxn][maxn];
ll dp(ll x,ll y)
{
if (d[x][y]>-1) return d[x][y];
if (x+1<=n&&y+1<=m){
d[x][y]=dp(x+1,y)+dp(x,y+1);
}
else
{
if (x+1<=n) d[x][y]=dp(x+1,y);
if (y+1<=m) d[x][y]=dp(x,y+1);
}
return d[x][y];
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%I64d%I64d%I64d%I64d",&n,&m,&x,&y);
memset(d,-1,sizeof(d));
d[x][y]=0;d[n][m]=1;
if (x-2>=0&&y-1>=0) d[x-2][y-1]=0;
if (x-2>=0&&y+1<=m) d[x-2][y+1]=0;
if (x-1>=0&&y-2>=0) d[x-1][y-2]=0;
if (x-1>=0&&y+2<=m) d[x-1][y+2]=0;
if (x+1<=n&&y-2>=0) d[x+1][y-2]=0;
if (x+1<=n&&y+2<=m) d[x+1][y+2]=0;
if (x+2<=n&&y-1>=0) d[x+2][y-1]=0;
if (x+2<=n&&y+1<=m) d[x+2][y+1]=0;
printf("%I64d\n",dp(0,0));
return 0;
}