#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
int mm(int n, int m) {
  long long s = 1;
  long long k = n;
  while (m) {
    if (m & 1) {
      s = s * k;
      s %= mod;
    }
    k = k * k;
    k %= mod;
    m >>= 1;
  }
  return s;
}
const int maxn = 1505;
int dp1[maxn][maxn];
int sp[maxn];
int sumdp1[maxn][maxn];
int s2dp1[maxn][maxn];
int p, k;
int jie[100005], jie1[100005];
void init() {
  jie[0] = 1;
  jie1[0] = 1;
  for (int i = 1; i < 100005; i++) {
    jie[i] = ((long long)jie[i - 1] * i) % mod;
    jie1[i] = mm(jie[i], mod - 2);
  }
}
int zuhe(int x, int y) {
  if (y > x) return 0;
  long long s = jie[x];
  s = s * jie1[y];
  s %= mod;
  s = s * jie1[x - y];
  s %= mod;
  return s;
}
int get(int x) {
  if (x > k) return 0;
  long long s = mm(p, x);
  s = s * mm(1 - p, k - x);
  s %= mod;
  s = s * zuhe(k, x);
  s %= mod;
  return s;
}
int main() {
  int n, m, a, b;
  init();
  cin >> n >> m;
  cin >> a >> b;
  cin >> k;
  p = ((long long)a * mm(b, mod - 2)) % mod;
  for (int i = 1; i <= m + 1; i++) {
    sp[i] = sp[i - 1] + get(i - 1);
    sp[i] %= mod;
  }
  for (int i = 1; i <= n; i++) {
    if (i == 1) {
      for (int j = 1; j <= m; j++) {
        dp1[i][j] = ((long long)get(m - j) * sp[j]) % mod;
      }
    } else {
      for (int j = 1; j <= m; j++) {
        long long x = sp[j];
        x = x * (sumdp1[i - 1][m] - sumdp1[i - 1][m - j]);
        x %= mod;
        x -= s2dp1[i - 1][j];
        x %= mod;
        dp1[i][j] = (x * get(m - j)) % mod;
      }
    }
    for (int j = 1; j <= m; j++) {
      sumdp1[i][j] = sumdp1[i][j - 1] + dp1[i][j];
      sumdp1[i][j] %= mod;
    }
    for (int j = 1; j <= m; j++) {
      s2dp1[i][j] =
          s2dp1[i][j - 1] + (((long long)sumdp1[i][j - 1] * get(j - 1)) % mod);
      s2dp1[i][j] %= mod;
    }
  }
  printf("%d\n", (sumdp1[n][m] + mod) % mod);
}
