#include <bits/stdc++.h>
using namespace std;
const int limite = 1505;
const long long int modulo = 1e9 + 7;
long long int mcd(long long int a, long long int b) {
  if (a < b) swap(a, b);
  if (b == 0) return a;
  return mcd(a % b, b);
}
long long int eleva(long long int b, long long int e) {
  if (e == 0) return 1;
  if (e % 2 == 0) return eleva(b * b % modulo, e / 2);
  return b * eleva(b * b % modulo, e / 2) % modulo;
}
long long int inverso(long long int x) { return eleva(x, modulo - 2); }
struct frac {
  long long int p, q;
  frac() {
    p = 0;
    q = 1;
  }
  frac(long long int a) {
    p = a % modulo;
    q = 1;
  }
  frac(long long int pin, long long int qin) {
    p = pin % modulo;
    q = qin % modulo;
  }
};
void escribe(frac f) { cout << f.p << "/" << f.q << endl; }
frac operator+(frac f1, frac f2) {
  return frac(f1.p * f2.q + f1.q * f2.p, f1.q * f2.q);
}
frac operator-(frac f1, frac f2) {
  return frac(f1.p * f2.q - f1.q * f2.p, f1.q * f2.q);
}
frac operator*(frac f1, frac f2) { return frac(f1.p * f2.p, f1.q * f2.q); }
int n, m;
long long int a, b;
int k;
frac prob[limite][limite];
frac proble[limite];
frac acumle[limite];
frac probpilla[limite];
frac probab[1000000];
frac probabinv[1000000];
frac pab;
frac fact[1000000];
frac factinv[1000000];
frac combi(int n, int k) { return fact[n] * factinv[k] * factinv[n - k]; }
int main() {
  cin >> n >> m;
  cin >> a >> b;
  cin >> k;
  fact[0] = 1;
  factinv[0] = 1;
  for (int i = 1; i <= k; i++) {
    fact[i] = fact[i - 1] * i;
    factinv[i] = factinv[i - 1] * inverso(i);
  }
  pab = frac(a, b);
  probab[0] = 1;
  for (int j = 1; j <= k; j++) probab[j] = probab[j - 1] * pab;
  probabinv[0] = 1;
  for (int j = 1; j <= k; j++) probabinv[j] = probabinv[j - 1] * (1 - pab);
  for (int j = 1; j <= m and j <= k + 1; j++)
    probpilla[j] = probab[j - 1] * probabinv[k - (j - 1)] * combi(k, j - 1);
  proble[m] = 1;
  for (int paso = 1; paso <= n; paso++) {
    for (int j = 1; j <= m; j++) acumle[j] = acumle[j - 1] + proble[j];
    frac suma = 0;
    frac elems = 0;
    for (int j = 1; j <= m; j++) {
      suma = suma - probpilla[j] * acumle[j - 1];
      elems = elems + probpilla[j];
      proble[j] =
          probpilla[m - j + 1] * (suma + elems * (acumle[m] - acumle[m - j]));
    }
  }
  frac sol = 0;
  for (int j = 1; j <= m; j++) sol = sol + proble[j];
  cout << (sol.p * inverso(sol.q) % modulo + modulo) % modulo << endl;
}
