#include <bits/stdc++.h>
using namespace std;
const long long MODER = 1000000007;
long long getmod(long long a) {
  if (a < 0 || a >= MODER) a %= MODER;
  if (a < 0) a += MODER;
  return a;
}
long long summod(long long a, long long b) {
  return getmod(getmod(a) + getmod(b));
}
long long mulmod(long long a, long long b) {
  return getmod(getmod(a) * getmod(b));
}
long long powmod(long long a, long long p) {
  long long ret = 1;
  while (p) {
    if (p & 1) ret = mulmod(ret, a);
    a = mulmod(a, a);
    p >>= 1;
  }
  return ret;
}
long long invmod(long long a) { return powmod(a, MODER - 2); }
const int MAXBIN = 1000005;
long long fac[MAXBIN], facinv[MAXBIN];
void prepbin() {
  fac[0] = facinv[0] = 1;
  for (int i = 1; i <= MAXBIN - 1; i++) {
    fac[i] = mulmod(fac[i - 1], i);
    facinv[i] = mulmod(facinv[i - 1], invmod(i));
  }
}
long long bin(long long n, long long r) {
  return mulmod(mulmod(fac[n], facinv[n - r]), facinv[r]);
}
long long n, m, k;
long long dp[1005][1005];
long long f(long long siz, long long clr) {
  if (dp[siz][clr] != -1) return dp[siz][clr];
  long long ret = 0;
  for (int i = 0; i < clr + 1; i++) {
    ret = summod(
        ret, mulmod(mulmod(powmod(-1, clr - i), bin(clr, i)), powmod(i, siz)));
  }
  return dp[siz][clr] = ret;
}
void solve() {
  if (m == 1) {
    cout << powmod(k, n) << '\n';
    return;
  }
  long long ret = 0;
  for (int i = 0; i < min(n, k) + 1; i++) {
    for (int j = 0; i + j <= n && i + 2 * j <= k; j++) {
      long long a = bin(k, i);
      long long b = mulmod(bin(k - i, j), bin(k - i - j, j));
      long long c = powmod(i, n * (m - 2));
      long long d = powmod(f(n, i + j), 2);
      ret = summod(ret, mulmod(mulmod(mulmod(a, b), c), d));
    }
  }
  cout << ret << endl;
}
int main(int argc, const char* argv[]) {
  prepbin();
  memset(dp, -1, sizeof(dp));
  while (cin >> n >> m >> k) {
    solve();
  }
  return 0;
}
