#include <bits/stdc++.h>
const int MAXK = 1E7 + 5;
const int P = 998244353;
int qpow(int n, int k) {
  int r = 1;
  while (k) {
    if (k & 1) r = 1ll * r * n % P;
    n = 1ll * n * n % P, k >>= 1;
  }
  return r;
}
bool mark[MAXK];
int pri[MAXK];
int inv[MAXK], id[MAXK], pw[MAXK], f[MAXK];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  inv[1] = id[1] = 1;
  for (int i = 2, cnt = 0; i <= k; i++) {
    inv[i] = 1ll * (P - P / i) * inv[P % i] % P;
    if (!mark[i]) pri[++cnt] = i, id[i] = qpow(i, k);
    for (int j = 1; j <= cnt && i * pri[j] <= k; j++) {
      mark[i * pri[j]] = 1;
      id[i * pri[j]] = 1ll * id[i] * id[pri[j]] % P;
      if (i % pri[j] == 0) break;
    }
  }
  m = qpow(m, P - 2), pw[0] = 1;
  for (int i = 1; i <= k; i++) pw[i] = 1ll * pw[i - 1] * m % P;
  f[k] = 1;
  for (int i = k - 1, t = 1; i >= 0; i--) {
    t = 1ll * t * (n - i - 1) % P * inv[k - i] % P;
    f[i] =
        ((1ll * (1 - m) * f[i + 1] + (k - i & 1 ? -1ll : 1ll) * t * pw[k - i]) %
             P +
         P) %
        P;
  }
  int ans = 0;
  for (int i = 1, t = 1; i <= k; i++) {
    t = 1ll * t * (n - i + 1) % P * inv[i] % P;
    ans = (ans + 1ll * id[i] * t % P * pw[i] % P * f[i]) % P;
  }
  printf("%d\n", ans);
  return 0;
}
