#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
const double pi = 3.14159265358979323846264338327950288419716939937511;
const double eps = 1e-11;
char ch_ch_ch[1 << 20];
string gs() {
  scanf("%s", ch_ch_ch);
  return string(ch_ch_ch);
}
string gl() {
  gets(ch_ch_ch);
  return string(ch_ch_ch);
}
const int mod = 1000000007;
int n, m, k;
inline void mulmod(int& a, int b) { a = (a * 1ll * b) % mod; }
int pw(int x, int a) {
  int res = 1;
  while (a) {
    if (a & 1) mulmod(res, x);
    mulmod(x, x);
    a >>= 1;
  }
  return res;
}
int fact[1000100], revf[1000100];
inline int modadd(int a, int b) {
  a += b;
  return (a >= mod) ? (a - mod) : a;
}
int dp[1010][1010];
int Paint(int k, int n) {
  if (k > n) return 0;
  if (dp[k][n] != -1) return dp[k][n];
  int res = 0;
  for (int j = k; j >= 1; --j) {
    int cur = pw(j, n);
    mulmod(cur, fact[k]);
    mulmod(cur, revf[k - j]);
    mulmod(cur, revf[j]);
    if ((k - j) & 1)
      res = modadd(res + mod, -cur);
    else
      res = modadd(res, cur);
  }
  return dp[k][n] = res;
}
void solution() {
  cin >> n >> m >> k;
  memset(dp, -1, sizeof(dp));
  if (m == 1) {
    cout << pw(k, n) << endl;
    return;
  }
  fact[0] = revf[0] = 1;
  for (int i = (1); i < (1000001); ++i) {
    fact[i] = fact[i - 1];
    mulmod(fact[i], i);
    revf[i] = pw(fact[i], mod - 2);
  }
  int r = 0;
  for (int x = (0); x < (n + 1); ++x)
    for (int y = (0); y < (n - x + 1); ++y)
      if (x != 0 || y != 0)
        if (2 * x + y > k)
          break;
        else {
          int res = 1;
          mulmod(res, fact[k]);
          mulmod(res, revf[y]);
          mulmod(res, revf[x]);
          mulmod(res, revf[x]);
          mulmod(res, revf[k - 2 * x - y]);
          mulmod(res, pw(y, n * (m - 2)));
          mulmod(res, Paint(x + y, n));
          mulmod(res, Paint(x + y, n));
          r = modadd(r, res);
        }
  cout << r << endl;
}
int main(int argc, char** argv) {
  solution();
  return 0;
}
