#include <bits/stdc++.h>
using namespace std;
int n = 3;
int k = 2;
const int maxn = 1010;
const int maxk = 1000001;
const int mod = 1000000007;
long long modpow(long long base, int p) {
  long long res = 1;
  for (; p; p >>= 1) {
    if (p & 1) res = (res * base) % mod;
    base = (base * base) % mod;
  }
  return res;
}
long long reverse(long long x) { return modpow(x, mod - 2); }
long long fact[maxk];
void precalc_fact() {
  fact[0] = 1;
  for (int i = 1; i <= maxk; i++) {
    fact[i] = (fact[i - 1] * i) % mod;
  }
}
long long C(int n, int k) {
  long long res = fact[n] * reverse(fact[k]) % mod * reverse(fact[n - k]) % mod;
  return res;
}
long long A(int n, int k) { return fact[n] * reverse(fact[n - k]) % mod; }
long long d[maxn][maxn];
void precalc_dp(int n, int k) {
  d[0][0] = 1;
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= k; j++) {
      d[i + 1][j] = (d[i + 1][j] + d[i][j] * j) % mod;
      d[i + 1][j + 1] = (d[i + 1][j + 1] + d[i][j]) % mod;
    }
}
int main() {
  int n = 3, m = 2, k = 2;
  cin >> n >> m >> k;
  if (m == 1) {
    cout << modpow(k, n * m) << endl;
    return 0;
  }
  int nk = min(n, k);
  precalc_fact();
  precalc_dp(n, nk);
  long long ans = 0;
  int pw = m > 2 ? n * (m - 2) : 0;
  for (int kk = 1; kk <= nk; kk++)
    for (int p = 0; p <= kk; p++) {
      ans += C(k, p) * C(k - p, kk - p) % mod * C(k - kk, kk - p) % mod *
             modpow(p, pw) % mod * d[n][kk] % mod * A(kk, kk) % mod * d[n][kk] %
             mod * A(kk, kk) % mod;
      ans %= mod;
    }
  cout << ans << endl;
  return 0;
}
