#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
const int mod = 1e9 + 7;
inline int add(int a, const int &b) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
inline int sub(int a, const int &b) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
inline int mul(const int &a, const int &b) { return 1ll * a * b % mod; }
int jie[N], inv[N];
long long quick(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
inline int C(int m, int n) {
  if (n > m || m < 0 || n < 0) return 0;
  return mul(mul(jie[m], inv[n]), inv[m - n]);
}
void pre() {
  inv[0] = inv[1] = 1, jie[0] = 1;
  for (int i = (2); i < (N); ++i)
    inv[i] = -1ll * mod / i * inv[mod % i] % mod + mod;
  for (int i = (1); i < (N); ++i)
    inv[i] = mul(inv[i], inv[i - 1]), jie[i] = mul(jie[i - 1], i);
}
int SL[2][N], SR[2][N], SD[N], D[N], G[2][N];
int main() {
  pre();
  int n, m, a, b, P, k;
  int c = 0;
  scanf("%d%d%d%d%d", &n, &m, &a, &b, &k);
  P = mul(a, quick(b, mod - 2));
  for (int i = (0); i < (k + 1); ++i)
    D[i] = mul(C(k, i), mul(quick(P, i), quick(sub(1, P), k - i)));
  SD[0] = D[0];
  for (int i = (1); i < (m + 1); ++i) SD[i] = add(SD[i - 1], D[i]);
  SL[0][m] = SR[0][1] = 1;
  for (int i = (1); i < (n + 1); ++i) {
    G[c][0] = mul(D[0], SL[c][0]);
    for (int r = (1); r < (m + 1); ++r)
      G[c][r] = add(G[c][r - 1], mul(D[r], SL[c][r]));
    c ^= 1;
    for (int r = (1); r < (m + 1); ++r)
      SL[c][r] =
          mul(D[m - r], sub(mul(sub(SL[c ^ 1][m], SR[c ^ 1][r + 1]), SD[r - 1]),
                            G[c ^ 1][r - 1]));
    for (int r = (1); r < (m + 1); ++r) SL[c][r] = add(SL[c][r], SL[c][r - 1]);
    for (int r = (1); r < (m + 1); ++r) SR[c][r] = SL[c][m + 1 - r];
  }
  printf("%d\n", SL[c][m]);
}
