#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 50;
const int M = 1e3 + 50;
const int mod = 1e9 + 7;
int dp[M][M], f[N], inv[N];
void init() {
  inv[0] = inv[1] = f[0] = f[1] = 1;
  for (int i = 2; i < N; i++) {
    f[i] = 1LL * f[i - 1] * i % mod;
    inv[i] = 1LL * (mod - mod / i) * inv[mod % i] % mod;
  }
  for (int i = 2; i < N; i++) {
    inv[i] = 1LL * inv[i - 1] * inv[i] % mod;
  }
  dp[0][0] = 1;
  for (int i = 1; i < M; i++)
    for (int j = 1; j < M; j++) {
      dp[i][j] = (1LL * dp[i - 1][j - 1] + 1LL * dp[i - 1][j] * j % mod) % mod;
    }
}
int c(int n, int m) {
  if (n < m || n < 0 || m < 0) return 0;
  return (1LL * f[n] * inv[m] % mod) * inv[n - m] % mod;
}
int qp(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = 1LL * res * a % mod;
    a = 1LL * a * a % mod;
    b >>= 1;
  }
  return res;
}
int main() {
  int n, m, k;
  init();
  while (~scanf("%d%d%d", &n, &m, &k)) {
    int res = 0;
    if (m == 1) {
      for (int i = 1; i <= n; i++) {
        res = (res + (1LL * c(k, i) * dp[n][i] % mod) * f[i] % mod) % mod;
      }
      printf("%d\n", res);
      continue;
    }
    for (int i = 0; i <= min(n, k); i++) {
      for (int j = i; j <= n && j <= k; j++) {
        int ans = 1LL * c(k, i) * qp(i, n * (m - 2)) % mod;
        ans = (1LL * ans * c(k - i, 2 * (j - i)) % mod) *
              c(2 * (j - i), j - i) % mod;
        ans = 1LL * ans * qp(1LL * dp[n][j] * f[j] % mod, 2) % mod;
        res = (res + ans) % mod;
      }
    }
    printf("%d\n", res);
  }
}
