#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000 * 1000 * 1000 + 7;
const int MAX_N = 1000 + 10;
long long D[MAX_N][MAX_N];
long long fac[MAX_N * MAX_N];
long long PW(long long a, long long b) {
  if (b == 0) return 1;
  if (b == 1) return (a % MOD);
  long long temp = PW(a, b / 2);
  temp = ((temp * temp) % MOD);
  if (b % 2 == 0)
    return temp;
  else
    return ((temp * a) % MOD);
}
long long MK(long long a) { return PW(a, MOD - 2); }
long long C(long long a, long long b) {
  if (a > b) return 0;
  if (b == 0) return 1;
  long long temp = fac[b];
  long long temp2 = (fac[a] * fac[b - a]) % MOD;
  return ((temp * MK(temp2)) % MOD);
}
long long N, M, K;
long long Ans;
int main() {
  ios::sync_with_stdio(false);
  cin >> N >> M >> K;
  fac[0] = 1;
  for (int i = 1; i < MAX_N * MAX_N; i++)
    fac[i] = ((long long)i * fac[i - 1]) % MOD;
  for (int i = 1; i < MAX_N; i++)
    for (int j = 1; j <= i; j++) {
      if (i == 1)
        D[i][j] = 1;
      else
        D[i][j] =
            ((long long)j * ((D[i - 1][j] + D[i - 1][j - 1]) % MOD)) % MOD;
    }
  if (M == 1) {
    for (int i = 1; i <= min(N, K); i++)
      Ans = (Ans + ((C(i, K) * D[N][i]) % MOD)) % MOD;
    cout << Ans << endl;
    return 0;
  }
  for (int i = 1; i <= min(N, K); i++)
    for (int j = 0; j <= i; j++) {
      long long temp1 = (D[N][i] * D[N][i]) % MOD;
      long long temp2 = (C(2 * i - j, K) * C(j, 2 * i - j)) % MOD;
      long long temp3 = C(i - j, 2 * (i - j));
      long long temp4 = (N * (M - 2));
      long long temp5 = PW(j, temp4);
      Ans =
          (Ans + ((((temp1 * temp2) % MOD) * ((temp3 * temp5) % MOD)) % MOD)) %
          MOD;
    }
  cout << Ans << endl;
  return 0;
}
