#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const int nMax = 2005;
const int kMax = 1000005;
long long comb[nMax][nMax];
long long fact[kMax];
void SetVals() {
  comb[0][0] = 1;
  for (int i = 1; i < nMax; ++i) {
    comb[i][0] = 1;
    for (int j = 1; j <= i; ++j)
      comb[i][j] = (comb[i - 1][j - 1] + comb[i - 1][j]) % MOD;
  }
  fact[0] = 1;
  for (int i = 1; i < kMax; ++i) fact[i] = (fact[i - 1] * i) % MOD;
}
long long power(long long base, long long exp) {
  if (exp == 0) return 1;
  if (exp % 2 == 0) {
    long long x = power(base, exp / 2);
    return (x * x) % MOD;
  }
  return (base * power(base, exp - 1)) % MOD;
}
inline long long invers(long long x) { return power(x, MOD - 2); }
long long C(long long n, long long k) {
  return (((fact[n] * invers(fact[k])) % MOD) * invers(fact[n - k])) % MOD;
}
int main() {
  long long n, m, k;
  SetVals();
  cin >> n >> m >> k;
  if (m == 1) {
    cout << power(k, n);
    return 0;
  }
  long long rasp = 0;
  vector<long long> dp(n + 1);
  dp[1] = 1;
  for (int i = 2; i <= n; ++i) {
    dp[i] = power(i, n);
    for (int j = 1; j < i; ++j) {
      dp[i] -= (comb[i][j] * dp[j]) % MOD;
      if (dp[i] < 0) dp[i] += MOD;
    }
  }
  vector<long long> combk(2 * n + 1);
  for (int i = 0; i < combk.size(); ++i) combk[i] = C(k, i);
  for (int x = 1; x <= min(k, n); ++x)
    for (int y = m == 2 ? 0 : 1; y <= x; ++y) {
      long long first = (combk[x] * dp[x]) % MOD;
      long long middle =
          y == 0 ? 1 : (power(y, n * (m - 2)) * comb[x][y]) % MOD;
      long long last = (C(k - x, x - y) * dp[x]) % MOD;
      long long total = 1;
      total *= first, total %= MOD;
      total *= middle, total %= MOD;
      total *= last, total %= MOD;
      rasp = (rasp + total) % MOD;
    }
  cout << rasp;
  return 0;
}
