#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10, P = 1e9 + 7;
int qpow(int a, int n) {
  int ans = 1;
  for (; n; a = a * (int64_t)a % P, n >>= 1)
    if (n & 1) ans = ans * (int64_t)a % P;
  return ans;
}
int fac[N], ifac[N], f[N];
int C(int n, int m) {
  if (m > n) return 0;
  return fac[n] * (int64_t)ifac[m] % P * ifac[n - m] % P;
}
int main() {
  fac[0] = 1;
  for (int i = 1; i < N; ++i) fac[i] = fac[i - 1] * (int64_t)i % P;
  ifac[N - 1] = qpow(fac[N - 1], P - 2);
  for (int i = N - 2; i >= 0; --i) ifac[i] = ifac[i + 1] * (i + 1ll) % P;
  int n, m, k;
  cin >> n >> m >> k;
  if (m == 1) return cout << qpow(k, n) << endl, 0;
  for (int i = 1; i <= min(n, k); ++i) {
    for (int j = i; j >= 0; --j) {
      int ret = (int64_t)C(i, j) * qpow(j, n) % P;
      if (j % 2 == i % 2)
        f[i] = (f[i] + ret) % P;
      else
        f[i] = (f[i] - ret) % P;
    }
  }
  int ans = 0;
  if (m == 2) {
    for (int i = 1; i <= n; ++i) {
      ans = (ans + C(k, i) * (int64_t)C(k, i) % P * f[i] % P * f[i]) % P;
    }
  } else {
    for (int i = 1; i <= min(n, k); ++i) {
      for (int j = 1; j <= i; ++j) {
        ans = (ans + C(k, i) * (int64_t)C(i, j) % P * C(k - i, i - j) % P *
                         f[i] % P * f[i] % P * qpow(j, n * (m - 2))) %
              P;
      }
    }
  }
  if (ans < 0) ans += P;
  cout << ans << endl;
}
