#include <bits/stdc++.h>
using namespace std;
const int M = 1000 * 1000 * 1000 + 7, MAXN = 1000 + 100;
long long n, m, k, color[MAXN][MAXN], ans, fc[MAXN * MAXN],
    revfact[MAXN * MAXN];
long long pw(long long x, long long y) {
  if (y == 0) return 1;
  if (y == 1) return x % M;
  long long tmp = pw(x, y / 2);
  if (y % 2) return ((tmp * tmp) % M * x) % M;
  return (tmp * tmp) % M;
}
long long c(long long x, long long y) {
  if (x < y) return 0;
  return ((fc[x] * revfact[y]) % M * revfact[x - y]) % M;
}
void fac() {
  fc[0] = 1;
  revfact[0] = 1;
  for (int i = 1; i <= max(n, k); i++) {
    fc[i] = (fc[i - 1] * i) % M;
    revfact[i] = pw(fc[i], M - 2);
  }
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++) {
      if (i == 1)
        color[i][j] = 1;
      else
        color[i][j] =
            ((j * color[i - 1][j]) % M + (j * color[i - 1][j - 1]) % M) % M;
    }
  fac();
  if (m == 1) {
    long long s = 0;
    for (int i = 1; i <= min(n, k); i++) {
      s += c(k, i) * color[n][i];
      s %= M;
    }
    cout << s << endl;
    return 0;
  }
  for (int i = 1; i <= min(n, k); i++)
    for (int j = 0; j <= i; j++) {
      ans += (((((c(k, 2 * i - j) * c(2 * i - j, j)) % M) *
                c(2 * i - 2 * j, i - j)) %
               M * pw(color[n][i], 2)) %
              M * pw(j, n * (m - 2))) %
             M;
      ans %= M;
    }
  cout << ans << endl;
  return 0;
}
