#include <bits/stdc++.h>
using namespace std;
int mod = 1000000007;
long long fact[1000010];
long long inv[1000010];
inline int bin(int a, int step) {
  long long res = 1;
  long long p = a;
  while (step) {
    if (step & 1) res = (res * p) % mod;
    p = (p * p) % mod;
    step /= 2;
  }
  return (int)res;
}
inline int C(int a, int b) {
  if (a < b) return 0;
  long long res = 1;
  res = (fact[a] * inv[b]) % mod;
  res = (res * inv[a - b]) % mod;
  return (int)res;
}
int dp[1010][1010];
int r(int n, int k) {
  if (n == k) return 1;
  if (k == 0) return 0;
  if (dp[n][k] != -1) return dp[n][k];
  long long res = (k * 1ll * r(n - 1, k)) % mod;
  res = (res + r(n - 1, k - 1)) % mod;
  return dp[n][k] = res;
}
int main() {
  memset(dp, -1, sizeof(dp));
  int n, m, k;
  cin >> n >> m >> k;
  if (m == 1) {
    cout << bin(k, n) << endl;
    return 0;
  }
  fact[0] = 1;
  for (int i = (1); i < (1000010); ++i) fact[i] = (fact[i - 1] * i) % mod;
  for (int i = (0); i < (1000010); ++i) inv[i] = bin(fact[i], mod - 2);
  long long res = 0;
  for (int i = (1); i < (min(n, k) + 1); ++i)
    for (int j = (0); j < (i + 1); ++j) {
      long long cur = 0;
      if (j) {
        cur = C(k, i);
        cur = (cur * C(i, j)) % mod;
        cur = (cur * C(k - i, i - j)) % mod;
        cur = (cur * r(n, i)) % mod;
        cur = (cur * fact[i]) % mod;
        cur = (cur * r(n, i)) % mod;
        cur = (cur * fact[i]) % mod;
        if (m > 2) cur = (cur * bin(j, n * (m - 2))) % mod;
      } else if (j == 0) {
        if (m == 2) {
          cur = C(k, i);
          cur = (cur * C(k - i, i)) % mod;
          cur = (cur * r(n, i)) % mod;
          cur = (cur * fact[i]) % mod;
          cur = (cur * r(n, i)) % mod;
          cur = (cur * fact[i]) % mod;
        }
      }
      res = (res + cur) % mod;
    }
  cout << res << endl;
  return 0;
}
