#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long POW(long long a, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ans;
}
long long jie[1100000];
long long C(int m, int n) {
  if (n > m) return 0LL;
  if (n == m || n == 0) return 1LL;
  return jie[m] * POW(jie[n], mod - 2) % mod * POW(jie[m - n], mod - 2) % mod;
}
long long dp[1100];
int main() {
  jie[1] = 1;
  for (int i = 2; i <= 1000000; jie[i] = i * jie[i - 1] % mod, i++)
    ;
  cin.sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) {
    dp[i] = POW(i, n);
    for (int j = 1; j < i; j++) {
      dp[i] = (dp[i] + mod - C(i, j) * dp[j]) % mod;
    }
  }
  if (m == 1)
    cout << POW(k, n) << endl;
  else if (m == 2) {
    long long ans = 0;
    for (int i = 1; i <= n; i++) {
      ans = (ans + C(k, i) * C(k, i) % mod * dp[i] % mod * dp[i] % mod) % mod;
    }
    cout << ans << endl;
  } else {
    long long ans = 0;
    for (int i = 1; i <= n; i++) {
      for (int j = 0; j <= n - i; j++) {
        ans = (ans + C(k, i) * C(k - i, j) % mod * C(k - i - j, j) % mod *
                         dp[i + j] % mod * dp[i + j] % mod *
                         POW(i, (m - 2) * n)) %
              mod;
      }
    }
    cout << ans << endl;
  }
}
