#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int MOD = 1000000007;
long long C[maxn << 1];
long long C0[maxn << 1][maxn];
long long f[maxn][maxn];
int n, m, K, ret;
void init() { scanf("%d%d%d", &n, &m, &K); }
long long Pow(long long x, int t) {
  if (t == 0) return 1;
  if (t == 1) return x;
  long long ret = Pow(x, t >> 1);
  ret = ret * ret % MOD;
  if (t & 1) ret = ret * x % MOD;
  return ret;
}
void work() {
  if (m == 1) {
    ret = Pow(K, n);
    return;
  }
  f[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i && j <= K; j++)
      f[i][j] = (f[i - 1][j] + f[i - 1][j - 1]) * j % MOD;
  C[1] = K;
  for (int i = 2; i <= (n << 1) && i <= K; i++)
    C[i] = C[i - 1] * (K - i + 1) % MOD * Pow(i, MOD - 2) % MOD;
  C0[0][0] = 1;
  for (int i = 1; i <= (n << 1); i++) {
    C0[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      C0[i][j] = C0[i - 1][j] + C0[i - 1][j - 1];
      if (C0[i][j] >= MOD) C0[i][j] -= MOD;
    }
  }
  for (int i = 1; i <= n && i <= K; i++)
    for (int j = i; j >= 0 && (i << 1) - j <= K; j--) {
      ret += Pow(j, (m - 2) * n) * C[(i << 1) - j] % MOD * C0[(i << 1) - j][i] %
             MOD * C0[i][j] % MOD * f[n][i] % MOD * f[n][i] % MOD;
      if (ret >= MOD) ret -= MOD;
    }
}
void print() { printf("%d\n", ret); }
int main() {
  init();
  work();
  print();
  return 0;
}
