#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
const int INF = 1000000007;
const int MOD = 1000000007;
int n, m, k;
long long fac[1000005], rev[1000005];
long long dp[1005];
long long PowMod(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return ret;
}
void init() {
  fac[0] = 1;
  rev[0] = 1;
  for (int i = 1; i <= 1000000; i++)
    fac[i] = fac[i - 1] * i % MOD, rev[i] = PowMod(fac[i], MOD - 2);
}
long long C(int n, int m) { return (fac[n] * rev[m] % MOD) * rev[n - m] % MOD; }
int main() {
  init();
  while (~scanf("%d%d%d", &n, &m, &k)) {
    if (m == 1) {
      printf("%I64d\n", PowMod(k, n));
      continue;
    }
    for (int i = 1; i <= n && i <= k; i++) {
      dp[i] = PowMod(i, n);
      for (int j = 1; j < i; j++) {
        dp[i] = (dp[i] - C(i, j) * dp[j] % MOD + MOD) % MOD;
      }
    }
    long long ret = 0;
    if (m == 2) {
      for (int i = 1; i <= n && i <= k; i++) {
        long long tmp = (dp[i] * dp[i]) % MOD;
        tmp = (tmp * C(k, i) % MOD) * C(k, i) % MOD;
        ret = (ret + tmp) % MOD;
      }
    } else {
      for (int i = 1; i <= n && i <= k; i++) {
        for (int j = 0; j <= n && j <= k; j++) {
          if (k < 2 * j + i || i + j > n) break;
          long long tmp = dp[i + j] * dp[i + j] % MOD;
          tmp = ((tmp * C(k, i) % MOD) * C(k - i, j) % MOD) * C(k - i - j, j) %
                MOD;
          tmp = (tmp * PowMod(i, n * (m - 2))) % MOD;
          ret = (ret + tmp) % MOD;
        }
      }
    }
    printf("%I64d\n", ret);
  }
  return 0;
}
