#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000 + 10;
const int MAXK = 1000 * 1000 + 10;
const long long MOD = 1000LL * 1000 * 1000 + 7;
int n, m, k;
long long dp[MAXN][MAXN];
long long fac[MAXK];
long long Pow(long long a, long long b) {
  if (b == 0) return 1;
  long long c = Pow(a, b / 2);
  c = (c * c) % MOD;
  if (b % 2) c = (c * a) % MOD;
  return c;
}
long long ModularInverse(long long a) { return Pow(a, MOD - 2); }
long long C(long long n, long long r) {
  return (fac[n] * ModularInverse((fac[r] * fac[n - r]) % MOD)) % MOD;
}
int main() {
  cin >> n >> m >> k;
  dp[0][0] = 1;
  for (int i = 1; i <= n; ++i)
    for (long long j = 1; j <= i; ++j)
      dp[i][j] = (j * dp[i - 1][j] + j * dp[i - 1][j - 1]) % MOD;
  fac[0] = 1;
  for (int i = 1; i <= k; ++i) fac[i] = (fac[i - 1] * i) % MOD;
  long long ans = 0;
  if (m == 1) {
    for (int i = 1; i <= min(n, k); ++i) ans = (ans + dp[n][i] * C(k, i)) % MOD;
    cout << ans << endl;
    return 0;
  }
  for (int i = 1; i <= min(n, k); ++i) {
    for (int com = 0; com <= i; ++com) {
      long long a = (dp[n][i] * dp[n][i]) % MOD;
      long long b0 = (C(k, 2 * i - com) * C(2 * i - com, com)) % MOD;
      long long b = (b0 * C(2 * (i - com), i - com)) % MOD;
      long long c = (a * b) % MOD;
      ans = (ans + c * Pow(com, (m - 2) * n)) % MOD;
    }
  }
  cout << ans << endl;
  return 0;
}
