#include <bits/stdc++.h>
using namespace std;
int jc[200050], jv[200050], base[200050], D[200050], base1[200050], sD[200050],
    dp[2][200050], L[200050];
inline void prepare();
inline int pow(int, int), C(int, int);
int main() {
  int n, m, a, b, K, p;
  prepare();
  scanf("%d%d%d%d%d", &n, &m, &a, &b, &K);
  p = a * 1ll * pow(b, 1000000007 - 2) % 1000000007;
  for (int i(*base1 = *base = 1); i < 200050; ++i)
    base[i] = base[i - 1] * 1ll * p % 1000000007,
    base1[i] = base1[i - 1] * 1ll * (1 - p) % 1000000007;
  for (int i(0); i <= K; ++i)
    D[i] = C(K, i) * 1ll * base[i] % 1000000007 * base1[K - i] % 1000000007,
    sD[i] = ((i ? sD[i - 1] : 0) + D[i]) % 1000000007;
  for (int i(K + 1); i <= m; ++i) sD[i] = sD[K];
  dp[0][m] = 1;
  for (int i(1), j; i <= n; ++i) {
    int sum(0), sum1(0);
    for (j = 1; j <= m; ++j)
      (sum += dp[i - 1 & 1][j]) %= 1000000007,
          L[j] = (L[j - 1] + dp[i - 1 & 1][j - 1]) % 1000000007;
    for (j = 1; j <= m; ++j)
      sum1 = (sum1 + D[j - 1] * 1ll * L[j]) % 1000000007,
      dp[i & 1][j] = ((sum - L[m - j + 1]) * 1ll * sD[j - 1] - sum1) %
                     1000000007 * D[m - j] % 1000000007;
  }
  int ans(0);
  for (int i(1); i <= m; ++i) ans = (ans + dp[n & 1][i]) % 1000000007;
  return printf("%d\n", (ans + 1000000007) % 1000000007), 0;
}
inline int C(int n, int r) {
  return n < 0 || r < 0 || n < r
             ? 0
             : jc[n] * 1ll * jv[r] % 1000000007 * jv[n - r] % 1000000007;
}
inline int pow(int x, int y) {
  int ans(1);
  while (y) {
    if (y & 1) ans = ans * 1ll * x % 1000000007;
    x = x * 1ll * x % 1000000007, y >>= 1;
  }
  return ans;
}
inline void prepare() {
  for (int i(*jc = 1); i < 200050; ++i)
    jc[i] = jc[i - 1] * 1ll * i % 1000000007;
  jv[200050 - 1] = pow(jc[200050 - 1], 1000000007 - 2);
  for (int i(200050 - 1); i; --i) jv[i - 1] = jv[i] * 1ll * i % 1000000007;
}
