#include <bits/stdc++.h>
using namespace std;
long long P = 1000000000 + 7;
long long LongPow(long long x, long long y) {
  long long c = 1;
  while (y > 0) {
    if (y % 2) {
      c = (c * x) % P;
      --y;
    }
    y /= 2;
    x = (x * x) % P;
  }
  return c;
}
const int maxn = 2010;
long long c[maxn][maxn];
long long u[maxn][maxn];
long long fac[1001000];
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  long long ans = 0;
  if (m == 1) {
    cout << LongPow(k, n) << endl;
    exit(0);
  }
  fac[0] = 1;
  for (int i = 1; i < 1000010; ++i) fac[i] = (fac[i - 1] * i) % P;
  memset(c, 0, sizeof(c));
  memset(u, 0, sizeof(u));
  u[0][0] = 1;
  for (int i = 1; i < maxn; ++i)
    for (int j = 1; j <= i; ++j)
      u[i][j] = (u[i - 1][j] * j + u[i - 1][j - 1]) % P;
  for (int i = 0; i < maxn; ++i) c[i][0] = 1;
  for (int i = 1; i < maxn; ++i)
    for (int j = 1; j < maxn; ++j)
      c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % P;
  for (int d = 1; d <= k; ++d) {
    if (d > 2 * n) break;
    long long rr = 0;
    for (int l = 0; l <= n; ++l) {
      int x = (d - l) / 2, y;
      y = x;
      if (l + y + x != d || x != y) continue;
      if (l + y > n || y < 0) continue;
      long long cc = 1;
      if (l == 0 && m > 2) continue;
      if (l > 0 && m > 2) cc = LongPow(l, m * n - n - n);
      cc = (cc * u[n][l + x]) % P;
      cc = (cc * fac[l + x]) % P;
      cc = (cc * u[n][l + y]) % P;
      cc = (cc * fac[l + y]) % P;
      cc = (cc * c[d][l]) % P;
      cc = (cc * c[d - l][x]) % P;
      cc = (cc * c[d - l - x][y]) % P;
      rr = (rr + cc) % P;
    }
    long long ur = fac[k];
    ur = (ur * LongPow(fac[d], P - 2)) % P;
    ur = (ur * LongPow(fac[k - d], P - 2)) % P;
    rr = (rr * ur) % P;
    ans = (ans + rr) % P;
  }
  cout << ans << endl;
  return 0;
}
