#include <bits/stdc++.h>
using namespace std;
const int maxn = 1505;
const int MOD = 1e9 + 7;
const int maxm = 1e5 + 5;
long long p[maxn], sump[maxn];
long long dp_r[2][maxn];
long long sum_dp_r[2][maxn];
long long inv[maxm], fac[maxm], facinv[maxm];
long long Inv(long long a, long long n = MOD - 2) {
  long long ret = 1, tmp = a;
  while (n) {
    if (n & 1) ret = ret * tmp % MOD;
    tmp = tmp * tmp % MOD;
    n >>= 1;
  }
  return ret;
}
long long n, m, a, b, k;
long long Pro;
long long Cp(long long i) {
  if (i > k) return 0;
  return Inv(Pro, i) * Inv(MOD + 1 - Pro, k - i) % MOD * fac[k] % MOD *
         facinv[i] % MOD * facinv[k - i] % MOD;
}
int main() {
  scanf("%lld %lld %lld %lld %lld", &n, &m, &a, &b, &k);
  Pro = a * Inv(b) % MOD;
  inv[0] = inv[1] = fac[0] = facinv[0] = fac[1] = facinv[1] = 1;
  for (int i = 2; i <= k; i++) {
    inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD;
    fac[i] = fac[i - 1] * i % MOD;
    facinv[i] = facinv[i - 1] * inv[i] % MOD;
  }
  sump[0] = p[0] = Cp(0);
  for (int i = 1; i <= m; i++) {
    p[i] = Cp(i);
    sump[i] = (sump[i - 1] + p[i]) % MOD;
  }
  int cur = 0;
  sum_dp_r[0][m] = 1;
  while (n--) {
    cur ^= 1;
    memset(dp_r[cur], 0, sizeof(dp_r[cur]));
    memset(sum_dp_r[cur], 0, sizeof(sum_dp_r[cur]));
    long long sum = 0;
    for (int r = 1; r <= m; r++) {
      dp_r[cur][r] += sum_dp_r[cur ^ 1][m] * sump[r - 1] % MOD;
      dp_r[cur][r] -= sum_dp_r[cur ^ 1][m - r] * sump[r - 1] % MOD;
      dp_r[cur][r] -= sum;
      dp_r[cur][r] %= MOD;
      sum += p[r] * sum_dp_r[cur ^ 1][r] % MOD;
      dp_r[cur][r] *= p[m - r];
      dp_r[cur][r] %= MOD;
      if (dp_r[cur][r] < 0) dp_r[cur][r] += MOD;
      sum_dp_r[cur][r] = (sum_dp_r[cur][r - 1] + dp_r[cur][r]) % MOD;
    }
  }
  printf("%lld\n", sum_dp_r[cur][m]);
  return 0;
}
