#include <bits/stdc++.h>
using namespace std;
int N, M, K;
long long dp[2222], fact[1111111], ifact[1111111];
long long p(int b, int po) {
  long long res = 1, m = b;
  int i;
  for (i = 0; i < 31; i++) {
    if (po & (1 << i)) res = (res * m) % 1000000007;
    m = (m * m) % 1000000007;
  }
  return res;
}
long long c(int a, int b) {
  if (b > a) return -1;
  return (((fact[a] * ifact[b]) % 1000000007) * ifact[a - b]) % 1000000007;
}
int main(int argc, char *argv[]) {
  scanf("%d%d%d", &N, &M, &K);
  int i, j;
  fact[0] = 1;
  for (i = 0; i < 1000002; i++) {
    fact[i + 1] = (fact[i] * (i + 1)) % 1000000007;
    ifact[i] = p(fact[i], 1000000007 - 2);
  }
  dp[1] = 1;
  for (i = 2; i < N + 1; i++) {
    dp[i] = p(i, N);
    for (j = 1; j < i; j++)
      dp[i] =
          (dp[i] - (dp[j] * c(i, j)) % 1000000007 + 1000000007) % 1000000007;
  }
  int barev, shoduje;
  long long sum = 0, cur;
  if (M == 1) {
    cout << p(K, N) << endl;
    return 0;
  }
  for (barev = 1; barev <= min(N, K); barev++)
    for (shoduje = 0; shoduje <= barev; shoduje++)
      if ((shoduje > 0 || M == 2) && 2 * barev - shoduje <= K) {
        cur = (c(K, shoduje) * c(K - shoduje, barev - shoduje)) % 1000000007;
        cur = (cur * c(K - barev, barev - shoduje)) % 1000000007;
        cur = (cur * dp[barev]) % 1000000007;
        cur = (cur * dp[barev]) % 1000000007;
        cur = (cur * p(shoduje, N * (M - 2))) % 1000000007;
        sum = (sum + cur) % 1000000007;
      }
  cout << sum << endl;
  return 0;
}
