#include <bits/stdc++.h>
using namespace std;
const int p = 1000000007;
long long f[1001], d[1000001];
long long mul(long long x, int y) {
  if (y == 0) return 1;
  if (y == 1) return x;
  long long z = mul(x, y / 2);
  z = (z * z) % p;
  if (y % 2 == 1) z = (z * x) % p;
  return z;
}
long long c(int x, int y) { return d[x] * mul(d[x - y] * d[y] % p, p - 2) % p; }
int main(void) {
  int n, m, t;
  scanf("%d %d %d", &n, &m, &t);
  if (m == 1) {
    printf("%I64d\n", mul(t, n));
    return 0;
  }
  d[0] = 1;
  d[1] = 1;
  for (int i = 2; i < 1000001; ++i) d[i] = (d[i - 1] * i) % p;
  f[1] = 1;
  for (int i = 2; i <= n; ++i) {
    f[i] = mul(i, n);
    for (int j = 1; j < i; ++j) f[i] = (f[i] - f[j] * c(i, j) % p + p) % p;
  }
  long long ans = 0;
  for (int i = 0; i <= t; ++i) {
    if (i > n) break;
    long long s = 0;
    for (int j = 0; i + 2 * j <= t; ++j) {
      if (i + j > n) break;
      s = (s + f[i + j] * f[i + j] % p * c(t, i) % p * c(t - i, j) % p *
                   c(t - i - j, j) % p) %
          p;
    }
    ans = (ans + s * mul(i, n * (m - 2)) % p) % p;
  }
  printf("%I64d\n", ans);
  return 0;
}
