#include <bits/stdc++.h>
const long long Mod = 1000000007;
long long dp[1010][1010];
long long jie[1010000], ni[1000100];
long long beis(long long x, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * x % Mod;
    x = x * x % Mod;
    n >>= 1;
  }
  return ans;
}
long long c(int n, int m) {
  if (m > n) return 0;
  return jie[n] * ni[n - m] % Mod * ni[m] % Mod;
}
int main() {
  jie[0] = 1;
  for (int i = 1; i <= 1000000; i++) jie[i] = jie[i - 1] * i % Mod;
  ni[0] = 1;
  ni[1] = 1;
  for (int i = 2; i <= 1000000; i++)
    ni[i] = ((-Mod / i) * ni[Mod % i] % Mod + Mod) % Mod;
  for (int i = 1; i <= 1000000; i++) {
    ni[i] = ni[i - 1] * ni[i] % Mod;
  }
  for (int i = 1; i <= 1000; i++) {
    dp[i][1] = 1;
    dp[i][i] = jie[i];
    for (int j = 2; j < i; j++) {
      dp[i][j] = (dp[i - 1][j] * j % Mod + dp[i - 1][j - 1] * j % Mod) % Mod;
    }
  }
  int n, m, k;
  while (scanf("%d %d %d", &n, &m, &k) == 3) {
    long long ans;
    if (m == 1)
      ans = beis(k, n);
    else if (m == 2) {
      ans = 0;
      for (int j = 1; j <= n; j++) {
        if (j > k) break;
        long long t = c(k, j) * dp[n][j] % Mod;
        ans = (ans + t * t) % Mod;
      }
    } else {
      ans = 0;
      for (int j = 1; j <= n; j++) {
        if (j > k) break;
        for (int l = 1; l <= j; l++) {
          ans = (ans + beis(l, n * (m - 2)) * c(k, l) % Mod * c(k - l, j - l) %
                           Mod * c(k - j, j - l) % Mod * dp[n][j] % Mod *
                           dp[n][j] % Mod) %
                Mod;
        }
      }
    }
    printf("%I64d\n", (ans + Mod) % Mod);
  }
  return 0;
}
