#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
const int maxn = 1001;
const int maxk = 1000001;
long long C[2 * maxn + 1][2 * maxn + 1];
long long fact[maxk], inv_fact[maxk];
long long dp[maxn * 2 + 1];
long long fpow(long long x, long long n) {
  long long ans = 1;
  for (; n > 0; n >>= 1) {
    if (n & 1) ans = ans * x % MOD;
    x = x * x % MOD;
  }
  return ans;
}
long long inv(long long x) { return fpow(x, MOD - 2); }
void precalc() {
  memset((C), (0), sizeof(C));
  memset((fact), (0), sizeof(fact));
  memset((inv_fact), (0), sizeof(inv_fact));
  for (int _n(2 * maxn + 1), i(0); i < _n; i++) {
    C[i][0] = C[i][i] = 1;
    for (int _n(i), j(1); j < _n; j++)
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;
  }
  fact[0] = 1;
  for (int _n(maxk), i(1); i < _n; i++) fact[i] = fact[i - 1] * i % MOD;
  for (int _n(maxk), i(0); i < _n; i++) inv_fact[i] = inv(fact[i]);
}
long long cnk(int n, int k) {
  return fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD;
}
int main() {
  precalc();
  int n, m, k;
  cin >> n >> m >> k;
  if (m == 1) {
    cout << fpow(k, n) << endl;
    return 0;
  }
  memset((dp), (0), sizeof(dp));
  for (int _n(maxn * 2 + 1), i(1); i < _n; i++) {
    dp[i] = fpow(i, n);
    for (int j = i - 1; j >= 1; --j) {
      dp[i] -= C[i][j] * dp[j] % MOD;
      dp[i] += MOD;
      dp[i] %= MOD;
    }
  }
  long long ans = 0;
  for (int _n(min(k, 2 * n) + 1), total(1); total < _n; total++) {
    for (int common = (total & 1); common <= total; common += 2) {
      const long long tmp = cnk(k, total);
      int single = (total - common) / 2;
      if (single + common > n) continue;
      long long tans = fpow(common, (long long)n * (m - 2));
      for (int _n(2), j(0); j < _n; j++) (tans *= dp[single + common]) %= MOD;
      tans = tans * C[total][common] % MOD;
      tans = tans * C[total - common][single] % MOD;
      tans = tans * tmp % MOD;
      ans += tans;
      if (ans >= MOD) ans -= MOD;
    }
  }
  cout << ans << endl;
  return 0;
}
