func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   int a, b, t, p;   int Pow(int x, int a) {     int ret = 1;     while (a) {       if (a & 1) ret = ret * 1ll * x % 1000000007;       a >>= 1, x = x * 1ll * x % 1000000007;     }     return ret;   }   int pr[200006];   int J[200006], iJ[200006];   int C(int a, int b) {     if (b > a) return 0;     return J[a] * 1ll * iJ[b] % 1000000007 * iJ[a - b] % 1000000007;   }   int sdp[1506][1506], pdp[1506][1506], g[1506][1506];   int sp[200006];   void solve() {     cin >> n >> m >> a >> b >> t;     J[0] = iJ[0] = 1;     for (int i = (1), iend = (t); i <= iend; ++i)       J[i] = J[i - 1] * 1ll * i % 1000000007, iJ[i] = Pow(J[i], 1000000007 - 2);     p = a * 1ll * Pow(b, 1000000007 - 2) % 1000000007;     pr[0] = C(t, 0) * 1ll * Pow(p, 0) % 1000000007 * Pow(1 + 1000000007 - p, t) %             1000000007;     for (int i = (1), iend = (m); i <= iend; ++i) {       if (i <= t)         pr[i] = C(t, i) * 1ll * Pow(p, i) % 1000000007 *                 Pow(1 + 1000000007 - p, t - i) % 1000000007;       sp[i] = (sp[i - 1] + pr[i - 1]) % 1000000007;     }     pdp[0][m] = 1, sdp[0][m] = 1;     for (int i = (1), iend = (n); i <= iend; ++i)       for (int j = (1), jend = (m); j <= jend; ++j) {         pdp[i][j] = pr[m - j] * 1ll *                     ((sdp[i - 1][m] - sdp[i - 1][m - j] + 1000000007) %                          1000000007 * 1ll * sp[j] % 1000000007 -                      g[i - 1][j] + 1000000007) %                     1000000007;         sdp[i][j] = (sdp[i][j - 1] + pdp[i][j]) % 1000000007;         g[i][j] = (g[i][j - 1] + pr[j - 1] * 1ll * sdp[i][j - 1] % 1000000007) %                   1000000007;       }     cout << sdp[n][m] << endl;   }   signed main() { solve(); }   