#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int add(int a, int b) { return a + b < mod ? a + b : a + b - mod; }
int mul(int a, int b) { return int(1LL * a * b % mod); }
int fexp(int b, int e = mod - 2) {
  int ans = 1;
  while (e) {
    if (e & 1) ans = mul(ans, b);
    b = mul(b, b);
    e /= 2;
  }
  return ans;
}
const int N = 1005, M = N * N;
int fat[M], ifat[M];
int C(int n, int k) {
  if (k > n) return 0;
  return mul(mul(fat[n], ifat[k]), ifat[n - k]);
}
int dp[N][N];
int f(int n, int k) {
  if (n == 0) return k == 0;
  if (k == 0) return 0;
  int &ans = dp[n][k];
  if (~ans) return ans;
  return ans = mul(k, add(f(n - 1, k - 1), f(n - 1, k)));
}
int n, m, k;
int prec[N];
int main() {
  memset(dp, -1, sizeof dp);
  fat[0] = 1;
  for (int i = 1; i < M; i++) fat[i] = mul(i, fat[i - 1]);
  ifat[M - 1] = fexp(fat[M - 1]);
  for (int i = M - 2; i >= 0; i--) ifat[i] = mul(i + 1, ifat[i + 1]);
  scanf("%d %d %d", &n, &m, &k);
  if (m == 1) return printf("%d\n", fexp(k, n)), 0;
  int ans = 0;
  if (m == 2) {
    for (int i = 1; i <= n and i <= k; i++) {
      int a = mul(C(k, i), f(n, i));
      a = mul(a, a);
      ans = add(ans, a);
    }
  } else {
    for (int j = 1; j <= n and j <= k; j++) {
      int pot = fexp(j, n * (m - 2));
      for (int i = j; i <= n and i <= k; i++) {
        int a = f(n, i);
        a = mul(a, a);
        a = mul(a, pot);
        a = mul(C(k, i), a);
        a = mul(C(i, j), a);
        a = mul(C(k - i, i - j), a);
        ans = add(ans, a);
      }
    }
  }
  printf("%d\n", ans);
}
