/// Author : Nguyễn Thái Sơn - Ti20 - THPT chuyên Lương Thế Vinh
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/trie_policy.hpp>
//#include <ext/rope>
//#pragma GCC optimize("Ofast")
//#pragma GCC optimization("unroll-loops, no-stack-protector")
//#pragma GCC target("avx,avx2,fma")
//using namespace std;
//using namespace __gnu_pbds;
//using namespace __gnu_cxx;
#define fi first
#define se second
#define TASK "test"
#define pb push_back
#define EL cout << endl
#define Ti20_ntson int main()
#define in(x) cout << x << endl
#define all(x) (x).begin(),(x).end()
#define getbit(x, i) (((x) >> (i)) & 1)
#define cntbit(x) __builtin_popcount(x)
#define FOR(i,l,r) for (int i = l; i <= r; i++)
#define FORD(i,l,r) for (int i = l; i >= r; i--)
#define Debug(a,n) for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> vii;
typedef unsigned long long ull;
typedef vector<vector<int>> vvi;
const int N = 1e5 + 5;
const int oo = INT_MAX;
const int mod = 1e9 + 7;
const int d4x[4] = {-1, 0, 1, 0} , d4y[4] = {0, 1, 0, -1};
const int d8x[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, d8y[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int w, b, r, K, m, ch[303][303], dp[305][305][305][2];
inline void Add(int &u, int v) {
u += v;
if (u >= mod)
u -= mod;
}
inline void Read_Input() {
cin >> w >> b >> r >> K >> m;
dp[1][0][0][0] = 1;
dp[0][1][0][1] = 1;
}
inline int C(int k, int n) {
if (ch[k][n] != -1)
return ch[k][n];
if (k == 1) return n;
if (k == 0) return 1;
if (k > n) return 0;
ch[k][n] = C(k, n - 1);
Add(ch[k][n], C(k - 1, n - 1));
return ch[k][n];
}
int f[305], g0[305][305], g1[305][305];
inline void Solve() {
memset(ch, -1, sizeof(ch));
/// dp[Red][Blue][Num][last]
/// Red -> last = 0
/// Blue -> last = 1
FOR(i, 0, r)
FOR(j, 0, b)
FOR(k, 0, r + b)
FOR(t, 0, 1)
if (dp[i][j][k][t]) {
if (i == r && j == b) {
Add(f[k], dp[i][j][k][t]);
continue;
}
if (t == 0) {
Add(dp[i + 1][j][k][t], dp[i][j][k][t]);
Add(dp[i][j + 1][k + 1][1], dp[i][j][k][t]);
continue;
}
if (t == 1) {
Add(dp[i + 1][j][k + 1][0], dp[i][j][k][t]);
Add(dp[i][j + 1][k][t], dp[i][j][k][t]);
continue;
}
}
/// phân W màu trắng ra thành các tập hợp nhóm riêng lẻ, không quá k mỗi nhóm
g0[0][0] = 1;
g1[0][0] = 1;
int Ans = 0;
FOR(i, 1, w)
FOR(j, 1, w)
FOR(k, 0, i - 1)
if (i - k < K)
Add(g1[i][j], g1[k][j - 1]);
FOR(i, 0, w)
FOR(j, 0, r + b + 1)
if (i + j > 0)
FOR(k, 0, i)
if (i - k < K)
Add(g0[i][j], g0[k][j - 1]);
FOR(i, m, r + b) {
int u = i - m;
int v = r + b + 1 - i;
FOR(j, 0, w) {
int res = 1ll * C(u, i) * g1[j][u] % mod;
res = 1ll * res * g0[w - j][v] % mod;
res = 1ll * res * f[i] % mod;
Add(Ans, res);
}
}
cout << Ans;
}
Ti20_ntson {
// freopen(TASK".INP","r",stdin);
// freopen(TASK".OUT","w",stdout);
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T = 1;
while (T -- ) {
Read_Input();
Solve();
}
}
Ly8vIEF1dGhvciA6IE5ndXnhu4VuIFRow6FpIFPGoW4gLSBUaTIwIC0gVEhQVCBjaHV5w6puIEzGsMahbmcgVGjhur8gVmluaAoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KLy8jaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+Ci8vI2luY2x1ZGUgPGV4dC9wYl9kcy90cmllX3BvbGljeS5ocHA+Ci8vI2luY2x1ZGUgPGV4dC9yb3BlPgoKLy8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QiKQovLyNwcmFnbWEgR0NDIG9wdGltaXphdGlvbigidW5yb2xsLWxvb3BzLCBuby1zdGFjay1wcm90ZWN0b3IiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4LGF2eDIsZm1hIikKCi8vdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfY3h4OwoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIFRBU0sgInRlc3QiCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgRUwgY291dCA8PCBlbmRsCiNkZWZpbmUgVGkyMF9udHNvbiBpbnQgbWFpbigpCiNkZWZpbmUgaW4oeCkgY291dCA8PCB4IDw8IGVuZGwKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgZ2V0Yml0KHgsIGkpICgoKHgpID4+IChpKSkgJiAxKQojZGVmaW5lIGNudGJpdCh4KSBfX2J1aWx0aW5fcG9wY291bnQoeCkKI2RlZmluZSBGT1IoaSxsLHIpIGZvciAoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykKI2RlZmluZSBGT1JEKGksbCxyKSBmb3IgKGludCBpID0gbDsgaSA+PSByOyBpLS0pCiNkZWZpbmUgRGVidWcoYSxuKSBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYVtpXSA8PCAiICI7IGNvdXQgPDwgZW5kbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHBhaXI8aW50LGludD4gdmlpOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2dmk7Cgpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGludCBvbyA9IElOVF9NQVg7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgZDR4WzRdID0gey0xLCAwLCAxLCAwfSAsIGQ0eVs0XSA9IHswLCAxLCAwLCAtMX07CmNvbnN0IGludCBkOHhbOF0gPSB7LTEsIC0xLCAwLCAxLCAxLCAxLCAwLCAtMX0sIGQ4eVs4XSA9IHswLCAxLCAxLCAxLCAwLCAtMSwgLTEsIC0xfTsKCmludCB3LCBiLCByLCBLLCBtLCBjaFszMDNdWzMwM10sIGRwWzMwNV1bMzA1XVszMDVdWzJdOwoKaW5saW5lIHZvaWQgQWRkKGludCAmdSwgaW50IHYpIHsKICAgIHUgKz0gdjsKICAgIGlmICh1ID49IG1vZCkKICAgICAgICB1IC09IG1vZDsKfQoKaW5saW5lIHZvaWQgUmVhZF9JbnB1dCgpIHsKICAgIGNpbiA+PiB3ID4+IGIgPj4gciA+PiBLID4+IG07CiAgICBkcFsxXVswXVswXVswXSA9IDE7CiAgICBkcFswXVsxXVswXVsxXSA9IDE7Cn0KCmlubGluZSBpbnQgQyhpbnQgaywgaW50IG4pIHsKICAgIGlmIChjaFtrXVtuXSAhPSAtMSkKICAgICAgICByZXR1cm4gY2hba11bbl07CiAgICBpZiAoayA9PSAxKSByZXR1cm4gbjsKICAgIGlmIChrID09IDApIHJldHVybiAxOwogICAgaWYgKGsgPiBuKSByZXR1cm4gMDsKICAgIGNoW2tdW25dID0gQyhrLCBuIC0gMSk7CiAgICBBZGQoY2hba11bbl0sIEMoayAtIDEsIG4gLSAxKSk7CiAgICByZXR1cm4gY2hba11bbl07Cn0KCmludCBmWzMwNV0sIGcwWzMwNV1bMzA1XSwgZzFbMzA1XVszMDVdOwoKaW5saW5lIHZvaWQgU29sdmUoKSB7CiAgICBtZW1zZXQoY2gsIC0xLCBzaXplb2YoY2gpKTsKICAgIC8vLyBkcFtSZWRdW0JsdWVdW051bV1bbGFzdF0KICAgIC8vLyBSZWQgLT4gbGFzdCA9IDAKICAgIC8vLyBCbHVlIC0+IGxhc3QgPSAxCiAgICBGT1IoaSwgMCwgcikKICAgICAgICBGT1IoaiwgMCwgYikKICAgICAgICAgICAgRk9SKGssIDAsIHIgKyBiKQogICAgICAgICAgICAgICAgRk9SKHQsIDAsIDEpCiAgICAgICAgICAgICAgICAgICAgaWYgKGRwW2ldW2pdW2tdW3RdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IHIgJiYgaiA9PSBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQoZltrXSwgZHBbaV1bal1ba11bdF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkKGRwW2kgKyAxXVtqXVtrXVt0XSwgZHBbaV1bal1ba11bdF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkKGRwW2ldW2ogKyAxXVtrICsgMV1bMV0sIGRwW2ldW2pdW2tdW3RdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZChkcFtpICsgMV1bal1bayArIDFdWzBdLCBkcFtpXVtqXVtrXVt0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQoZHBbaV1baiArIDFdW2tdW3RdLCBkcFtpXVtqXVtrXVt0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgIC8vLyBwaMOibiBXIG3DoHUgdHLhuq9uZyByYSB0aMOgbmggY8OhYyB04bqtcCBo4bujcCBuaMOzbSByacOqbmcgbOG6uywga2jDtG5nIHF1w6EgayBt4buXaSBuaMOzbSAKICAgIAogICAgZzBbMF1bMF0gPSAxOwogICAgZzFbMF1bMF0gPSAxOwogICAgaW50IEFucyA9IDA7CiAgICBGT1IoaSwgMSwgdykKICAgICAgICBGT1IoaiwgMSwgdykKICAgICAgICAgICAgRk9SKGssIDAsIGkgLSAxKQogICAgICAgICAgICAgICAgaWYgKGkgLSBrIDwgSykKICAgICAgICAgICAgICAgICAgICBBZGQoZzFbaV1bal0sIGcxW2tdW2ogLSAxXSk7CiAgICBGT1IoaSwgMCwgdykKICAgICAgICBGT1IoaiwgMCwgciArIGIgKyAxKQogICAgICAgICAgICBpZiAoaSArIGogPiAwKQogICAgICAgICAgICAgICAgRk9SKGssIDAsIGkpCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgLSBrIDwgSykKICAgICAgICAgICAgICAgICAgICAgICAgQWRkKGcwW2ldW2pdLCBnMFtrXVtqIC0gMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAKICAgIEZPUihpLCBtLCByICsgYikgewogICAgICAgIGludCB1ID0gaSAtIG07CiAgICAgICAgaW50IHYgPSByICsgYiArIDEgLSBpOwogICAgICAgIEZPUihqLCAwLCB3KSB7CiAgICAgICAgICAgIGludCByZXMgPSAxbGwgKiBDKHUsIGkpICogZzFbal1bdV0gJSBtb2Q7CiAgICAgICAgICAgIHJlcyA9IDFsbCAqIHJlcyAqIGcwW3cgLSBqXVt2XSAlIG1vZDsKICAgICAgICAgICAgcmVzID0gMWxsICogcmVzICogZltpXSAlIG1vZDsKICAgICAgICAgICAgQWRkKEFucywgcmVzKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGNvdXQgPDwgQW5zOwp9CgpUaTIwX250c29uIHsKLy8gICAgZnJlb3BlbihUQVNLIi5JTlAiLCJyIixzdGRpbik7Ci8vICAgIGZyZW9wZW4oVEFTSyIuT1VUIiwidyIsc3Rkb3V0KTsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGludCBUID0gMTsKICAgIHdoaWxlIChUIC0tICkgewogICAgICAgIFJlYWRfSW5wdXQoKTsKICAgICAgICBTb2x2ZSgpOwogICAgfQp9Cgo=