#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int MAXN = 1005;
int N, M, K;
long long qpow(long long x, long long y) {
  long long ans = 1;
  while (y) {
    if (y & 1) {
      ans = ans * x % mod;
    }
    x = x * x % mod;
    y >>= 1;
  }
  return ans;
}
long long fact[MAXN * MAXN];
long long inv[MAXN * MAXN];
long long perm(long long n, long long k) { return fact[n] * inv[n - k] % mod; }
long long nck(long long n, long long k) {
  return fact[n] * inv[k] % mod * inv[n - k] % mod;
}
long long dp[MAXN][MAXN];
long long powers[MAXN * MAXN];
int main() {
  cin.tie(0);
  cin.sync_with_stdio(0);
  fact[0] = 1;
  inv[0] = 1;
  for (int a = 1; a < MAXN * MAXN; a++) {
    fact[a] = fact[a - 1] * a % mod;
    inv[a] = qpow(fact[a], mod - 2);
  }
  cin >> N >> M >> K;
  dp[1][1] = 1;
  for (int a = 2; a <= N; a++) {
    for (int b = 1; b <= min(K, N); b++) {
      dp[a][b] += dp[a - 1][b] * b;
      dp[a][b + 1] += dp[a - 1][b];
      dp[a][b] %= mod;
      dp[a][b + 1] %= mod;
    }
  }
  long long sum = 0;
  if (M == 1) {
    for (int a = 1; a <= min(N, K); a++) {
      sum += dp[N][a] * perm(K, a);
      sum %= mod;
    }
  } else {
    for (int b = 0; b <= K; b++) {
      powers[b] = qpow(b, N * (M - 2));
    }
    for (int a = 1; a <= min(K, N); a++) {
      for (int b = a; 2 * a - b <= K && b >= 0; b--) {
        long long to_add = dp[N][a] * dp[N][a] % mod * nck(K, 2 * a - b) % mod;
        to_add = to_add * nck(2 * a - b, b) % mod;
        to_add = to_add * nck(2 * a - 2 * b, (a - b)) % mod;
        to_add = to_add * fact[a] % mod;
        to_add = to_add * fact[a] % mod;
        to_add = to_add * powers[b] % mod;
        sum += to_add;
        sum %= mod;
      }
    }
  }
  cout << sum;
}
