using System;
public class GFG{
// Functiont to calculate
// total possible arrangements
static int totalArrangements(int N, int M,
int X, int Y)
{
int[,,] dp = new int[N + 1, M + 1, 2];
int mod = 1000000007;
for (int i = 0; i <= N; i++) {
for (int j = 0; j <= M; j++) {
dp[i, j, 0] = 0;
dp[i, j, 1] = 0;
}
}
dp[0, 0, 0] = 1;
dp[0, 0, 1] = 1;
for (int i = 0; i <= N; i++) {
for (int j = 0; j <= M; j++) {
for (int k = 1; k <= X; k++) {
if (i >= k) {
dp[i, j, 1]
+= dp[i - k, j, 0];
dp[i, j, 1] %= mod;
}
}
for (int k = 1; k <= Y; k++) {
if (j >= k) {
dp[i, j, 0]
+= dp[i, j-k, 1];
dp[i, j, 0] %= mod;
}
}
}
}
return ((dp[N, M, 0] + dp[N, M,1]) % mod);
}
// Driver code
static public void Main ()
{
int N = 2, M = 3, X = 1, Y = 2;
Console.WriteLine(totalArrangements(N, M, X, Y));
}
}
// This code is contributed by hrithikgarg03188.