#include <bits/stdc++.h>
template <typename T>
inline bool MIN(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool MAX(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
using namespace std;
int n, m, K, p;
int exgcd(int a, int b, int &x, int &y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  }
  int res = exgcd(b, a % b, x, y);
  int t = x;
  x = y;
  y = t - a / b * y;
  return res;
}
int get_inv(int a) {
  int x, y;
  exgcd(a, 1000000007, x, y);
  return (x % 1000000007 + 1000000007) % 1000000007;
}
int P[100010], sum_P[100010];
int g[1510][1510], sum[1510][1510];
int main() {
  scanf("%d%d", &n, &m);
  int a, b;
  scanf("%d%d", &a, &b);
  p = (long long)a * get_inv(b) % 1000000007;
  scanf("%d", &K);
  int pow2 = 1;
  for (int i = 1; i <= K; ++i)
    pow2 = (long long)pow2 * (1 - p + 1000000007) % 1000000007;
  for (int i = 0, pow = 1, c = 1; i <= K; ++i) {
    if (i == K && p == 1) pow2 = 1;
    P[i] = (long long)c * pow % 1000000007 * pow2 % 1000000007;
    pow2 = (long long)pow2 * get_inv((1 - p + 1000000007) % 1000000007) %
           1000000007;
    pow = (long long)pow * p % 1000000007;
    c = (long long)c * (K - i) % 1000000007 * get_inv(i + 1) % 1000000007;
  }
  sum_P[0] = P[0];
  for (int i = 1; i <= m; ++i) sum_P[i] = (sum_P[i - 1] + P[i]) % 1000000007;
  g[0][m] = sum[0][m] = 1;
  for (int i = 1; i <= n; ++i) {
    int tmp = 0;
    for (int j = 1; j <= m; ++j) {
      tmp = (tmp + (long long)P[j - 1] * sum[i - 1][j - 1]) % 1000000007;
      g[i][j] = ((long long)sum_P[j - 1] *
                     (sum[i - 1][m] - sum[i - 1][m - j] + 1000000007) -
                 tmp + 1000000007) %
                1000000007;
      g[i][j] = (long long)g[i][j] * P[m - j] % 1000000007;
      sum[i][j] = (sum[i][j - 1] + g[i][j]) % 1000000007;
    }
  }
  printf("%d\n", sum[n][m]);
  return 0;
}
