#include <bits/stdc++.h>
using namespace std;
const int N = 100010, M = 1505, mod = 1e9 + 7;
inline int qpow(int x, int y = mod - 2) {
  int res = 1;
  for (; y; y >>= 1, x = 1ll * x * x % mod)
    if (y & 1) res = 1ll * res * x % mod;
  return res;
}
int fac[N], inv[N];
inline int C(int x, int y) {
  if (y < 0 || y > x) return 0;
  return 1ll * fac[x] * inv[y] % mod * inv[x - y] % mod;
}
void C_init(int n) {
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  inv[n] = qpow(fac[n]);
  for (int i = n - 1; ~i; i--) inv[i] = inv[i + 1] * (i + 1ll) % mod;
}
int n, m, p, np, k, B[M];
int pre_b[M], pre_bl[M];
void init() {
  int a, b;
  cin >> n >> m >> a >> b >> k;
  p = 1ll * a * qpow(b) % mod, np = (1 - p + mod) % mod;
  C_init(k);
  for (int i = 0; i <= min(m - 1, k); ++i)
    B[i] = 1ll * C(k, i) * qpow(p, i) % mod * qpow(np, k - i) % mod;
  for (int i = 1; i <= m; ++i) pre_b[i] = (pre_b[i - 1] + B[i - 1]) % mod;
}
inline void add(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
inline void sub(int &x, int y) {
  x -= y;
  if (x < 0) x += mod;
}
int L[M], F = 1;
void trans() {
  static int S[M];
  for (int i = 1; i <= m; ++i)
    pre_bl[i] = (pre_bl[i - 1] + 1ll * B[i - 1] * L[i]) % mod;
  for (int x = 1; x <= m; ++x)
    S[x] = 1ll * B[m - x] *
           (1ll * (F - L[m - x + 1] + mod) * pre_b[x] % mod - pre_bl[x] + mod) %
           mod;
  F = 0;
  for (int i = 1; i <= m; ++i)
    L[i] = (L[i - 1] + S[i - 1]) % mod, F = (F + S[i]) % mod;
}
int main() {
  init();
  while (n--) trans();
  cout << F << endl;
}
