#include<bits/stdc++.h>

#define ll long long 
#define int  ll
#define pb push_back
#define N  2003
#define f1 first 
#define s2 second 
#define PII pair<int,int>


using namespace std;
double dp[105][105][105];
int a,b,c,d,t;
string s;

double dpf(int a,int b,int c){
	if(a==100 || b==100 ||c==100 )
		return 0;
	if(dp[a][b][c]!=-1){	
		return dp[a][b][c] ;
	}
	// cout<<((double)a/(double)(a+b+c)) <<endl;
	dp[a][b][c]=(dpf(a+1,b,c)+1)*((double)a/(double)(a+b+c));
	dp[a][b][c]+=(dpf(a,b+1,c)+1)*((double)b/(double)(a+b+c));
	dp[a][b][c]+=(dpf(a,b,c+1)+1)*((double)c/(double)(a+b+c));

	return dp[a][b][c];
}
int32_t main(){
	// freopen("a.gir","r",stdin);
	// freopen("a.cik","w",stdout);
	// scanf("%lld",&t);
	t=1;
	while(t--){
		for(int i=0;i<101;i++)
		for(int j=0;j<101;j++)
		for(int k=0;k<101;k++)
			dp[i][j][k]=-1;


		scanf("%lld %lld %lld",&a,&b,&c);
		printf("%.10lf\n",dpf(a,b,c) ); ;
	}

	
} 

#include<bits/stdc++.h>
using namespace std;

int H, W, A, B;

bool used[16][16];

int dfs(int x, int y, int a) {
    if (H == y) return a == 0;

    if (W == x) return dfs(0, y + 1, a);

    if (used[y][x]) return dfs(x + 1, y, a);

    int res = 0;

    if (y + 1 < H && !used[y+1][x] && 0 < a) {
        used[y][x] = true;
        used[y+1][x] = true;
        res += dfs(x+1, y, a-1);
        used[y][x] = used[y+1][x] = false;
    }
    if (x + 1 < W && !used[y][x+1] && 0 < a) {
        used[y][x] = true;
        used[y][x+1] = true;
        res += dfs(x+1, y, a-1);
        used[y][x] = false;
        used[y][x+1] = false;
    }
    res += dfs(x+1, y, a);
    return res;
}

int main() {
    cin >> H >> W >> A >> B;
    cout << dfs(0, 0, A) << endl;  
}