#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 dp2[N][N];
int pref[N];
int me[N];
int n, m, k;
int mat[100][100];
int mask[100];
int suf[100];
int brute(int ii, int jj) {
  if (jj == m) return brute(ii + 1, 0);
  if (ii == n) {
    for (int i = 0; i < m; i++) mask[i] = 0;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < m; j++) {
        mask[j] |= 1 << mat[i][j];
      }
    suf[m] = 0;
    for (int i = m - 1; i >= 0; i--) suf[i] = mask[i] | suf[i + 1];
    int tmp = 0;
    for (int i = 0; i + 1 < m; i++) {
      tmp |= mask[i];
      int t = suf[i + 1];
      ;
      if (__builtin_popcount(tmp) != __builtin_popcount(t)) return 0;
    }
    return 1;
  }
  int ans = 0;
  for (int c = 1; c <= k; c++) {
    mat[ii][jj] = c;
    ans += brute(ii, jj + 1);
  }
  return ans;
}
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 i = 1; i <= n; i++) pref[i] = add(pref[i - 1], f(n, i));
    for (int w = 1; w <= n; w++) {
      for (int i = 0; i <= w; i++) {
        int tmp = mul(C(w, i), fexp(w - i, n * (m - 2)));
        if (i % 2)
          prec[w] = add(prec[w], mod - tmp);
        else
          prec[w] = add(prec[w], tmp);
      }
    }
    for (int i = 1; i <= n and i <= k; i++) {
      int old = 0;
      for (int j = 1; j <= i; j++) {
        int now = mul(C(i, j), f(n, j));
        int a = f(n, i);
        a = mul(a, a);
        a = mul(a, fexp(j, n * (m - 2)));
        a = mul(C(k, i), a);
        a = mul(C(i, j), a);
        a = mul(C(k - i, i - j), a);
        ans = add(ans, a);
        old = add(old, now);
      }
    }
  }
  printf("%d\n", ans);
}
