#include <bits/stdc++.h>
using namespace std;
const int maxn = 1100, mod = 1e9 + 7, maxa = 1e6 + 100, maxb = 23, maxs = 340;
const long long inf = 2e18 + 13;
long long max(long long x, long long y) { return (x > y ? x : y); }
long long min(long long x, long long y) { return (x < y ? x : y); }
long long caf[maxn * maxn];
long long fac[maxn * maxn];
long long pd[maxn];
long long pw(long long x, long long y) {
  if (y == 0) {
    return 1;
  }
  long long res = pw(x, y / 2);
  res *= res;
  res %= mod;
  if (y & 1) {
    res *= x;
  }
  return res % mod;
}
void build() {
  fac[0] = 1;
  for (long long i = 1; i < maxn * maxn; i++) {
    fac[i] = fac[i - 1] * i % mod;
  }
  for (int i = 0; i < maxn * maxn; i++) {
    caf[i] = pw(fac[i], mod - 2);
  }
}
long long c(long long x, long long y) {
  if (x > y) {
    return 0;
  }
  long long res = ((fac[y] * caf[x]) % mod) * caf[y - x];
  return res % mod;
}
void pre(int x) {
  pd[0] = 1;
  for (int i = 0; i <= x; i++) {
    long long tmp = 0;
    for (int j = i; j >= 0; j--) {
      int t1 = 1;
      if ((i - j) & 1) {
        t1 = -1;
      }
      tmp += t1 * pw(j, x) * c(j, i);
      tmp += mod;
      tmp %= mod;
    }
    pd[i] = tmp;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  build();
  long long n, m, k, ans = 0;
  cin >> n >> m >> k;
  if (m == 1) {
    cout << pw(k, n);
    return 0;
  }
  pre(n);
  for (int i = 0; i <= min(n, k); i++) {
    for (int j = 0; j <= i; j++) {
      ans += c(i, k) * pd[i] % mod * c(j, i) % mod * c(i - j, k - i) % mod *
             pd[i] % mod * pw(j, n * m - 2 * n) % mod;
      ans %= mod;
    }
  }
  cout << ans;
  return 0;
}
