#include <bits/stdc++.h>
using namespace std;
long long int inv[1000005], fac[1000005], finv[1000005];
long long int dp[1005][1005];
void make() {
  fac[0] = fac[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < 1000005; i++) {
    inv[i] = 1000000007 - (1000000007 / i) * inv[1000000007 % i] % 1000000007;
    fac[i] = fac[i - 1] * i % 1000000007;
    finv[i] = finv[i - 1] * inv[i] % 1000000007;
  }
  for (int i = 1; i < 1005; i++) {
    if (i == 1) {
      dp[i][i] = 1;
      continue;
    }
    for (int j = 1; j <= i; j++) {
      dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) * j % 1000000007;
    }
  }
}
long long int C(int a, int b) {
  if (a < b) return 0;
  return fac[a] * (finv[b] * finv[a - b] % 1000000007) % 1000000007;
}
long long int pw(long long int x, int t) {
  long long int ret = 1;
  for (int i = 0; 1 << i <= t; i++) {
    if (t >> i & 1) {
      ret *= x;
      ret %= 1000000007;
    }
    x *= x;
    x %= 1000000007;
  }
  return ret;
}
int main() {
  make();
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  if (m == 1) {
    printf("%I64d\n", pw(k, n));
    return 0;
  }
  long long int ret = 0;
  for (int i = 1; i <= min(n, k); i++) {
    for (int j = 0; j <= i; j++) {
      long long int one = C(k, j);
      long long int sec = C(k - j, i - j) * C(k - i, i - j) % 1000000007;
      ret += ((one * sec % 1000000007) * (dp[n][i] * dp[n][i] % 1000000007) %
              1000000007) *
             pw(j, n * (m - 2)) % 1000000007;
      ret %= 1000000007;
    }
  }
  printf("%I64d\n", ret);
  return 0;
}
