#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int MAXN = 1000 + 10;
const int MAXF = 1000000 + 10;
int n, m, k;
int fact[MAXF], dfact[MAXF], prePow[MAXN], preDyn[MAXN];
long long dp[MAXN][MAXN];
long long POWER(int base, int p) {
  int ret = 1, cur = base;
  while (p) {
    if (p & 1) ret = (long long)ret * cur % mod;
    cur = (long long)cur * cur % mod;
    p >>= 1;
  }
  return ret;
}
int getC(int n, int k) {
  return (n < k || k < 0)
             ? (0)
             : ((long long)fact[n] * dfact[k] % mod * dfact[n - k] % mod);
}
int main() {
  fact[0] = dfact[0] = 1;
  for (int i = 1; i < MAXF; i++) {
    fact[i] = (long long)fact[i - 1] * i % mod;
    dfact[i] = POWER(fact[i], mod - 2);
  }
  cin >> m >> n >> k;
  dp[0][0] = 1;
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= m; j++)
      dp[i][j] = ((long long)dp[i - 1][j] * j + dp[i - 1][j - 1]) % mod;
  if (n == 1) {
    cout << POWER(k, m) << endl;
    return 0;
  }
  long long ret = 0;
  for (int j = 0; j <= m; j++) {
    prePow[j] = POWER(j, (n - 2) * m);
    preDyn[j] =
        (long long)dp[m][j] * dp[m][j] % mod * fact[j] % mod * fact[j] % mod;
  }
  for (int i = 0; 2 * i <= k; i++)
    for (int j = 0; 2 * i + j <= k && i + j <= m; j++)
      ret =
          (ret + (long long)preDyn[i + j] % mod * prePow[j] % mod * getC(k, i) %
                     mod * getC(k - i, j) % mod * getC(k - i - j, i) % mod) %
          mod;
  cout << ret << endl;
  return 0;
}
