#include <bits/stdc++.h>
using namespace std;
inline void read(register int *n) {
  register char c;
  *n = 0;
  do {
    c = getchar();
  } while (c < '0' || c > '9');
  do {
    *n = c - '0' + *n * 10;
    c = getchar();
  } while (c >= '0' && c <= '9');
}
long long C[2048][2048], fac[1000001], dfac[1000001], D[2048][2048];
long long pmod(long long x, long long y) {
  if (y == 0) return 1;
  if (y % 2) return pmod(x, y - 1) * x % 1000000007;
  long long r = pmod(x, y / 2);
  return r * r % 1000000007;
}
long long calc(long long n, long long k, long long c = 0) {
  long long res = 0;
  for (register int i = (0); i < (int)(k + 1); ++i) {
    long long tmp = C[k][i] * pmod(i + c, n);
    tmp %= 1000000007;
    if (i % 2)
      res -= tmp;
    else
      res += tmp;
    res %= 1000000007;
  }
  return res;
}
inline long long binom(long long n, long long r) {
  if (r < 0 || r > n) return 0;
  long long res = 1;
  res = res * fac[n] % 1000000007;
  res = res * dfac[r] % 1000000007;
  res = res * dfac[n - r] % 1000000007;
  return res;
}
int main() {
  for (register int i = (0); i < (int)(1000001); ++i)
    fac[i] = (i ? fac[i - 1] * i : 1) % 1000000007,
    dfac[i] = pmod(fac[i], 1000000007 - 2);
  for (register int i = (0); i < (int)(2048); ++i)
    for (register int j = (0); j < (int)(i + 1); ++j)
      C[i][j] = (j == 0 || j == i) ? 1 : (C[i - 1][j - 1] + C[i - 1][j]);
  for (register int i = (0); i < (int)(2048); ++i)
    for (register int j = (0); j < (int)(2048); ++j)
      if (i == 0)
        D[i][j] = j == 0;
      else if (j <= 1)
        D[i][j] = j;
      else
        D[i][j] = (j * D[i - 1][j] + D[i - 1][j - 1]) % 1000000007;
  int n, m, k;
  cin >> n >> m >> k;
  if (m == 1) {
    cout << pmod(k, n) << endl;
    return 0;
  }
  long long res = 0;
  for (register int x = (1); x < (int)(min(k, n) + 1); ++x)
    for (int y = 0; y <= x; y++)
      if (x * 2 - y <= k) {
        long long tmp = binom(k, x * 2 - y);
        tmp = tmp * binom(x * 2 - y, x - y) % 1000000007;
        tmp = tmp * binom(x, x - y) % 1000000007;
        tmp = tmp * D[n][x] % 1000000007;
        tmp = tmp * D[n][x] % 1000000007;
        tmp = tmp * fac[x] % 1000000007;
        tmp = tmp * fac[x] % 1000000007;
        tmp = tmp * pmod(y, n * (m - 2));
        res = (res + tmp) % 1000000007;
      }
  cout << res << endl;
  return 0;
}
