#include <bits/stdc++.h>
using namespace std;
long long MOD = 1000000007;
long long Egcd(long long a, long long b, long long &first, long long &second) {
  long long d;
  if (b == 0) {
    first = 1;
    second = 0;
    return a;
  }
  d = Egcd(b, a % b, second, first);
  second -= a / b * first;
  return d;
}
long long Inv(long long u, long long MOD) {
  long long first, second, g = Egcd(u, MOD, first, second);
  if (g != 1) return -1;
  return (first % MOD + MOD) % MOD;
}
long long ModNor(long long first) { return (first % MOD + MOD) % MOD; }
long long ModAdd(long long first, long long second) {
  return (ModNor(first) + ModNor(second)) % MOD;
}
long long ModSub(long long first, long long second) {
  return ModAdd(first, -second);
}
long long ModMul(long long first, long long second) {
  return ModNor(first) * ModNor(second) % MOD;
}
long long ModPow(long long a, long long n) {
  long long z = 1, m = a;
  for (; n; n >>= 1, m = m * m % MOD)
    if (n & 1) z = z * m % MOD;
  return z;
}
const int N = 2036;
long long dp[N][N];
long long inv[N];
int n, m, k;
long long ncr[N][N];
long long fac[N];
int main() {
  cin >> n >> m >> k;
  inv[0] = 0;
  for (int i = (1); i <= (int)(1024); i++) inv[i] = Inv(i, MOD);
  fac[0] = 1;
  for (int i = (1); i <= (int)(1024); i++) fac[i] = (fac[i - 1] * i) % MOD;
  memset(dp, 0, sizeof(dp));
  dp[1][1] = 1;
  for (int i = (1); i <= (int)(1024); i++) {
    for (int j = (1); j <= (int)(1024); j++) {
      dp[i + 1][j] = ModAdd(dp[i + 1][j], ModMul(dp[i][j], j));
      dp[i + 1][j + 1] = ModAdd(dp[i + 1][j + 1], dp[i][j]);
    }
  }
  for (int first = (0); first <= (int)(min(1024, k)); first++) {
    ncr[first][0] = 1;
    for (int i = (0); i <= (int)(1024); i++) {
      ncr[first][i + 1] = ModMul(ncr[first][i], k - first - i);
      ncr[first][i + 1] = ModMul(ncr[first][i + 1], inv[i + 1]);
    }
  }
  for (int i = (1); i <= (int)(min(k, n)); i++) {
    dp[n][i] *= fac[i];
    dp[n][i] %= MOD;
  }
  long long ans = 0;
  if (m == 1) {
    for (int r = (1); r <= (int)(min(k, n)); r++) {
      ans += (ncr[0][r] * dp[n][r]) % MOD;
      ans %= MOD;
    }
  } else if (m == 2) {
    for (int r = (1); r <= (int)(min(k, n)); r++) {
      long long add = ModMul(ncr[0][r], ncr[0][r]);
      add = ModMul(add, dp[n][r]);
      add = ModMul(add, dp[n][r]);
      ans += add;
      ans %= MOD;
    }
  } else {
    for (int r = (1); r <= (int)(min(k, n)); r++) {
      long long tot = 0;
      for (int first = (1); first <= (int)(r); first++) {
        long long add = 1;
        add = ModMul(add, ncr[0][first]);
        if (first < r) {
          if (k - first < r - first) continue;
          if (k - r < r - first) continue;
          if (r - first < 0) continue;
          add = ModMul(add, ncr[first][r - first]);
          add = ModMul(add, ncr[r][r - first]);
        }
        add = ModMul(add, ModPow(first, (m - 2) * n));
        add = ModMul(add, dp[n][r]);
        add = ModMul(add, dp[n][r]);
        ans = ModAdd(ans, add);
        tot += add;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
