#include <bits/stdc++.h>
using namespace std;
const int N = 1505;
const int M = 205;
const int K = 100005;
const int mod = 1000000007;
int n, a, b, k, m, w, iw;
int dp1[2][M][M], pl[N], pr[N], fac[K], inv[K], sl[N][N], sr[N][N];
int spl[N], spr[N], s1[N], s2[N];
int quickpow(int x, int y) {
  if (y < 0) return 0;
  int s = 1;
  for (; y; y >>= 1, x = 1ll * x * x % mod)
    if (y & 1) s = 1ll * s * x % mod;
  return s;
}
int C(int x, int y) {
  if (x < y) return 0;
  return 1ll * fac[x] * inv[y] % mod * inv[x - y] % mod;
}
void init() {
  w = 1ll * a * quickpow(b, mod - 2) % mod;
  iw = (mod + 1 - w) % mod;
  fac[0] = fac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i <= k; i++) {
    fac[i] = 1ll * fac[i - 1] * i % mod;
    inv[i] = quickpow(fac[i], mod - 2);
  }
  for (int i = 1; i <= m; i++) {
    pl[i] = 1ll * C(k, i - 1) * quickpow(w, i - 1) % mod *
            quickpow(iw, k - i + 1) % mod;
    pr[i] = 1ll * C(k, m - i) * quickpow(w, m - i) % mod *
            quickpow(iw, k + i - m) % mod;
  }
}
inline void add(int &x, int y) {
  (y >= mod) ? y -= mod : 0;
  x += y;
  (x >= mod) ? x -= mod : 0;
}
void solve1() {
  int i, j, k, s, v;
  dp1[0][1][m] = 1;
  for (i = 1; i <= n; i++) {
    s = 0;
    for (j = 1; j <= m; j++)
      for (k = j; k <= m; k++) {
        add(sl[i][k], dp1[i - 1 & 1][j][k]);
        add(sr[i][j], dp1[i - 1 & 1][j][k]);
        add(s, dp1[i - 1 & 1][j][k]);
      }
    for (j = 2; j <= m; j++) add(sl[i][j], sl[i][j - 1]);
    for (j = m - 1; j >= 1; j--) add(sr[i][j], sr[i][j + 1]);
    for (j = 1; j <= m; j++)
      for (k = j; k <= m; k++) {
        v = ((s - sl[i][j - 1] + mod) % mod - sr[i][k + 1] + mod) % mod;
        dp1[i & 1][j][k] = 1ll * pl[j] * pr[k] % mod * v % mod;
      }
    memset(dp1[i - 1 & 1], 0, sizeof(dp1[i - 1 & 1]));
  }
  s = 0;
  for (j = 1; j <= m; j++)
    for (k = j; k <= m; k++) add(s, dp1[n & 1][j][k]);
  printf("%d\n", s);
}
void solve2() {
  int i, j, k, s, v;
  sl[0][m] = sr[0][1] = 1;
  pl[0] = pr[m + 1] = 1;
  for (i = 1; i <= m; i++) add(spl[i], spl[i - 1] + pl[i]);
  for (i = m; i >= 1; i--) add(spr[i], spr[i + 1] + pr[i]);
  for (i = 1; i <= n; i++) {
    memset(s1, 0, sizeof(s1));
    memset(s2, 0, sizeof(s2));
    s = 0;
    for (j = 1; j <= m; j++) add(sl[i - 1][j], sl[i - 1][j - 1]);
    for (j = m; j >= 1; j--) add(sr[i - 1][j], sr[i - 1][j + 1]);
    for (j = 1; j <= m; j++)
      add(s1[j], 1ll * pl[j] * sl[i - 1][j - 1] % mod + s1[j - 1]);
    for (j = m; j >= 1; j--)
      add(s2[j], 1ll * pr[j] * sr[i - 1][j + 1] % mod + s2[j + 1]);
    s = sl[i - 1][m];
    for (j = 1; j <= m; j++) {
      v = 1ll * spl[j] * s % mod - s1[j] -
          1ll * sr[i - 1][j + 1] * spl[j] % mod;
      while (v < 0) v += mod;
      sl[i][j] = 1ll * v * pr[j] % mod;
    }
    for (j = m; j >= 1; j--) {
      v = 1ll * spr[j] * s % mod - s2[j] -
          1ll * sl[i - 1][j - 1] * spr[j] % mod;
      while (v < 0) v += mod;
      sr[i][j] = 1ll * v * pl[j] % mod;
    }
  }
  s = 0;
  for (i = 1; i <= m; i++) add(s, sl[n][i]);
  printf("%d\n", s);
}
int main() {
  scanf("%d%d", &n, &m);
  scanf("%d%d", &a, &b);
  scanf("%d", &k);
  init();
  if (n <= 200 && m <= 200)
    solve1();
  else
    solve2();
  return 0;
}
