#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef pair<int,int>P;

const int MOD=1000000007;
//~ const int MOD=998244353;
const int INF=0x3f3f3f3f;
const ll INFL=0x3f3f3f3f3f3f3f3f;

int main(){
	int a,b,c,d;cin>>a>>b>>c>>d;
	if(a==c&&b==d){
		puts("0");return 0;
	}
	if(abs(a-c)+abs(b-d)<=3){
		puts("1");
		return 0;
	}
	if(a+b==c+d||a-b==c-d){
		puts("1");
		return 0;
	}
	int x1=a-b,y1=a+b;
	int x2=c-d,y2=c+d;
	if(abs(x1-x2)<=3||abs(y1-y2)<=3){
		puts("2");return 0;
	}
	if((a+b)%2==(c+d)%2){
		puts("2");return 0;
	}
	puts("3");
}
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>

using ll = long long int;
const int INF = (1<<30);
const ll INFLL = (1ll<<60);
const ll MOD = (ll)(1e9+7);

#define l_ength size

void mul_mod(ll& a, ll b){
	a *= b;
	a %= MOD;
}

void add_mod(ll& a, ll b){
	a = (a<MOD)?a:(a-MOD);
	b = (b<MOD)?b:(b-MOD);
	a += b;
	a = (a<MOD)?a:(a-MOD);
}

ll fc[2002002]={1ll},nv[2002002]={1ll};

ll rwpw(ll a, ll p){
	ll ret = 1ll;
	while(p){
		if(p%2){
			mul_mod(ret,a);
		}
		mul_mod(a,a);
		p /= 2;
	}
	return ret;
}

ll c(int n, int k){
	if(n<k){
		return 0ll;
	}
	if(k<0){
		return 0ll;
	}
	ll ret = fc[n];
	mul_mod(ret,nv[k]);
	mul_mod(ret,nv[n-k]);
	return ret;
}

int main(void){
	int n,m,k,i;
	ll ans;
	std::cin >> n >> m >> k;
	if(n > m+k){
		std::cout << "0" << std::endl;
		return 0;
	}
	for(i=1; i<=n+m; ++i){
		fc[i] = fc[i-1]*i%MOD;
		nv[i] = rwpw(fc[i],MOD-2);
	}
	ans = c(n+m,n);
	add_mod(ans,MOD-c(n+m,n-k-1));
	std::cout << ans << std::endl;
	return 0;
}
