#include <bits/stdc++.h>
using namespace std;
template <typename tp>
inline void read(tp &x) {
  x = 0;
  char c = getchar();
  int f = 0;
  for (; c < '0' || c > '9'; f |= c == '-', c = getchar())
    ;
  for (; c >= '0' && c <= '9'; x = (x << 3) + (x << 1) + c - '0', c = getchar())
    ;
  if (f) x = -x;
}
namespace {
const int mo = 1e9 + 7;
inline int add(int x, int y) {
  x += y;
  return x >= mo ? x - mo : x;
}
inline int sub(int x, int y) {
  x -= y;
  return x < 0 ? x + mo : x;
}
inline int mul(int x, int y) { return (long long)x * y % mo; }
inline int power(int a, int k = mo - 2) {
  int ans = 1;
  for (; k; k >>= 1, a = mul(a, a))
    if (k & 1) ans = mul(ans, a);
  return ans;
}
inline void U(int &x, int y) { x = add(x, y); }
}  // namespace
const int N = 1e5 + 233;
int n, m, coefa, coefb, P, T;
int fac[N], ifac[N], p[N], sump[N];
inline int C(int n, int m) {
  return n < m ? 0 : mul(fac[n], mul(ifac[m], ifac[n - m]));
}
int main(void) {
  read(n);
  read(m);
  read(coefa);
  read(coefb);
  P = mul(coefa, power(coefb));
  fac[0] = 1;
  for (register int i = 1; i <= (N - 1); i++) fac[i] = mul(fac[i - 1], i);
  for (register int i = 0; i < (int)N; i++) ifac[i] = power(fac[i]);
  read(T);
  for (register int i = 0; i < (int)m + 1; i++) {
    if (i <= T)
      p[i + 1] = mul(C(T, i), mul(power(P, i), power(1 + mo - P, T - i)));
  }
  for (register int i = 0; i < (int)m + 1; i++)
    sump[i] = add(i ? sump[i - 1] : 0, p[i]);
  vector<int> h(m + 2, 0);
  h[m] = 1;
  for (register int i = 1; i <= (n); i++) {
    vector<int> new_h(m + 2, 0);
    vector<int> f(m + 2, 0), g(m + 2, 0);
    for (int r = 1; r <= m; r++) {
      f[r] = add(f[r - 1], h[r]);
      g[r] = add(g[r - 1], mul(f[r - 1], p[r]));
    }
    for (int r = 1; r <= m; r++) {
      int rr = m - r + 1;
      new_h[r] = sub(mul(sump[r], mul(p[rr], f[m])),
                     add(mul(p[rr], g[r]), mul(mul(p[rr], f[m - r]), sump[r])));
    }
    swap(h, new_h);
  }
  int ans = 0;
  for (auto i : h) U(ans, i);
  cout << ans << "\n";
}
