#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 0;
  char ch = getchar();
  while (!isdigit(ch)) f = ch == '-', ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  return f ? -x : x;
}
const int N = 1505, K = 100005, mod = 1e9 + 7;
int inv2 = (mod + 1) >> 1;
int Pow(int x, int y) {
  int ans = 1;
  for (; y; y >>= 1, x = (long long)x * x % mod)
    if (y & 1) ans = (long long)ans * x % mod;
  return ans;
}
void Add(int &x, int y) {
  if ((x += y) >= mod) x -= mod;
}
void Del(int &x, int y) {
  if ((x -= y) < 0) x += mod;
}
int Add(int x) { return x >= mod ? x - mod : x; }
int Del(int x) { return x < 0 ? x + mod : x; }
int n, m, P, k;
int Fac[K], Inv[K];
void prework() {
  n = K - 1;
  Fac[0] = 1;
  for (int i = (1); i <= (n); i++) Fac[i] = (long long)Fac[i - 1] * i % mod;
  Inv[n] = Pow(Fac[n], mod - 2);
  for (int i = (n); i >= (1); i--) Inv[i - 1] = (long long)Inv[i] * i % mod;
}
int C(int n, int m) {
  if (m < 0 || m > n) return 0;
  return (long long)Fac[n] * Inv[m] % mod * Inv[n - m] % mod;
}
int p[N], s[N], pe;
int dp[N][N];
int s0[N], s1[N];
int plen[N];
int f[N];
int Getp() {
  int a = read(), b = read();
  return (long long)a * Pow(b, mod - 2) % mod;
}
int main() {
  prework();
  n = read(), m = read(), P = Getp(), k = read();
  for (int i = (0); i <= (k); i++)
    Add(p[min(i, m)],
        (long long)C(k, i) * Pow(P, i) % mod * Pow(Del(1 - P), k - i) % mod);
  s[0] = p[0];
  for (int i = (1); i <= (m); i++) s[i] = Add(s[i - 1] + p[i]);
  pe = p[m];
  for (int i = (0); i <= (m - 1); i++)
    Add(pe, (long long)p[i] * Del(s[m] - s[m - i - 1]) % mod);
  if (n == 1) return printf("%d\n", Del(1 - pe)), 0;
  for (int i = (1); i <= (m); i++)
    for (int j = (i); j <= (m); j++) {
      Add(dp[1][i - 1], (long long)p[i - 1] * p[m - j] % mod);
    }
  for (int i = (1); i <= (n - 1); i++) {
    memset(s0, 0, sizeof s0), memset(s1, 0, sizeof s1);
    for (int j = (0); j <= (m - 1); j++) {
      int v = dp[i][j];
      Del(s0[0], (long long)v * s[m - j - 1] % mod);
      Add(s0[j], (long long)v * s[m - j - 1] % mod);
      Add(s1[0], v);
      Del(s1[j], v);
      Add(s1[m - j], v);
      Del(s1[m], v);
    }
    for (int j = (0); j <= (m - 1); j++) {
      if (j != 0) Add(s0[j], s0[j - 1]), Add(s1[j], s1[j - 1]);
      dp[i + 1][j] = Add((long long)s0[j] * p[j] % mod +
                         (long long)s1[j] * p[j] % mod * s[m - j - 1] % mod);
    }
  }
  for (int i = (2); i <= (n); i++)
    for (int j = (0); j <= (m - 1); j++) Add(plen[i], dp[i][j]);
  f[0] = 1;
  for (int i = (1); i <= (n); i++) {
    f[i] = f[i - 1];
    Del(f[i], (long long)f[i - 1] * pe % mod);
    for (int j = (2); j <= (i); j++)
      if (j & 1)
        Add(f[i], (long long)f[i - j] * plen[j] % mod);
      else
        Del(f[i], (long long)f[i - j] * plen[j] % mod);
  }
  int ans = f[n];
  cout << ans << endl;
  return 0;
}
