#include <bits/stdc++.h>
using namespace ::std;
const long long maxn = 1e6 + 500;
const long long mod = 1e9 + 7;
long long fuc[maxn];
long long rfuc[maxn];
long long f[1050][1050];
long long poww(long long a, long long b) {
  if (b == 0) {
    return 1;
  }
  long long v = poww(a, b / 2);
  v = (v * v) % mod;
  if (b % 2 == 1) {
    v = (v * a) % mod;
  }
  return v;
}
long long cc(long long n, long long k) {
  if (k > n || k < 0) return 0;
  return fuc[n] * ((rfuc[k] * rfuc[n - k]) % mod) % mod;
}
int main() {
  f[1][1] = 1;
  for (long long m = 1; m < 1050; m++) {
    f[m][1] = 1;
    for (long long a = 2; a < 1050; a++) {
      f[m][a] = (((a * f[m - 1][a]) % mod) + f[m - 1][a - 1]) % mod;
    }
  }
  long long n, m, k;
  cin >> m >> n >> k;
  fuc[0] = 1;
  rfuc[0] = 1;
  for (long long i = 1; i < maxn; i++) {
    fuc[i] = (fuc[i - 1] * i) % mod;
    rfuc[i] = poww(fuc[i], mod - 2);
  }
  for (long long m = 0; m < 1050; m++) {
    for (long long a = 0; a < 1050; a++) {
      f[m][a] = (f[m][a] * fuc[a]) % mod;
    }
  }
  if (n == 1) {
    cout << poww(k, m);
    return 0;
  }
  long long ans = 0;
  for (long long a = min(m, k); a > 0; a--) {
    long long b = a;
    for (long long c = min(a, b); c >= 1; c--) {
      long long v =
          (((((cc(k, c) * cc(k - c, a - c)) % mod) * cc(k - a, b - c)) % mod) *
           poww(c, (n - 2) * m)) %
          mod;
      v = (v * f[m][a]) % mod;
      v = (v * f[m][b]) % mod;
      ans += v;
      ans %= mod;
    }
  }
  if (n == 2) {
    for (long long a = min(m, k); a > 0; a--) {
      long long b = a;
      long long c = 0;
      long long v =
          (((((cc(k, c) * cc(k - c, a - c)) % mod) * cc(k - a, b - c)) % mod) *
           poww(c, (n - 2) * m)) %
          mod;
      v = (v * f[m][a]) % mod;
      v = (v * f[m][b]) % mod;
      ans += v;
      ans %= mod;
    }
  }
  cout << ans;
}
