#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
long long fact[1100000];
long long dpfun[1100][1100];
long long sum[1100];
long long gcde(long long a, long long b, long long& x, long long& y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long xp, yp;
  long long res = gcde(b, a % b, xp, yp);
  x = yp;
  y = xp - yp * (a / b);
  return res;
}
long long inv(long long n) {
  long long x, y;
  gcde(n, MOD, x, y);
  return (x % MOD + MOD) % MOD;
}
long long fun(int n, int m) {
  if (n < m) return 0;
  if (n == 0) return 1;
  if (dpfun[n][m] != -1) return dpfun[n][m];
  return dpfun[n][m] = (m * (fun(n - 1, m) + fun(n - 1, m - 1))) % MOD;
}
long long cn(int n, int k) {
  if (n < 0 or k < 0) return 0;
  if (n < k) return 0;
  return (((fact[n] * inv(fact[k])) % MOD) * inv(fact[n - k])) % MOD;
}
long long eleva(long long n, long long k) {
  if (k == 0) return 1;
  long long res = eleva(n, k / 2);
  res = (res * res) % MOD;
  if (k % 2) res = (res * n) % MOD;
  return res;
}
int main() {
  memset(dpfun, -1, sizeof(dpfun));
  fact[0] = 1;
  for (int i = 1; i < 1100000; ++i) fact[i] = (i * fact[i - 1]) % MOD;
  int n, m, k;
  cin >> n >> m >> k;
  sum[0] = 0;
  for (int i = 1; i <= n; ++i) {
    long long tmp = 0;
    for (int j = 1; j <= i; ++j) tmp = (tmp + cn(i, j) * fun(n, j)) % MOD;
    sum[i] = tmp;
  }
  if (m == 1) {
    long long res = 0;
    for (int i = 1; i <= min(n, k); ++i) {
      long long tmp = (cn(k, i) * fun(n, i)) % MOD;
      res = (res + tmp) % MOD;
    }
    cout << res << endl;
    return 0;
  }
  long long res = 0;
  for (int i = 1; i <= min(n, k); ++i) {
    for (int j = 0; j <= i; ++j) {
      long long tmp =
          (((cn(k, j) * cn(k - j, i - j)) % MOD) * cn(k - i, i - j)) % MOD;
      tmp = (tmp * fun(n, i)) % MOD;
      if (m > 1) tmp = (tmp * fun(n, i)) % MOD;
      if (m > 2) tmp = (tmp * eleva(sum[j], m - 2)) % MOD;
      res = (res + tmp) % MOD;
    }
  }
  cout << res << endl;
}
