#include <bits/stdc++.h>
const int p = 1000000007;
int fac[1200000], inv[1200000];
int f[1200];
int i, j, k, m, n, s;
inline int power(int x, int y) {
  if (y == 0) return 1;
  int t = power(x, y / 2);
  t = 1LL * t * t % p;
  if (y & 1) t = 1LL * t * x % p;
  return t;
}
inline void pre_C() {
  fac[0] = 1;
  for (int i = 1; i <= k; i++) fac[i] = 1LL * fac[i - 1] * i % p;
  inv[k] = power(fac[k], p - 2);
  for (int i = k - 1; i >= 0; i--) inv[i] = 1LL * inv[i + 1] * (i + 1) % p;
  return;
}
inline int C(int x, int y) {
  return 1LL * fac[x] * inv[y] % p * inv[x - y] % p;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  pre_C();
  for (i = 1; i <= n; i++) {
    f[i] = power(i, n);
    for (j = 1; j < i; j++) f[i] = (f[i] + p - 1LL * C(i, j) * f[j] % p) % p;
  }
  if (m == 1) printf("%d", power(k, n));
  if (m == 2) {
    for (i = 1; i <= n; i++)
      s = (s + 1LL * C(k, i) * C(k, i) % p * f[i] % p * f[i] % p) % p;
    printf("%d", s);
  }
  if (m > 2) {
    for (i = 1; i <= n; i++)
      for (j = 0; (i + j <= n) && (i + 2 * j <= k); j++)
        s = (s + 1LL * C(k, i) * C(k - i, j) % p * C(k - i - j, j) % p *
                     f[i + j] % p * f[i + j] % p * power(i, n * (m - 2)) % p) %
            p;
    printf("%d", s);
  }
  return 0;
}
