#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
****************************************************************/