#include <bits/stdc++.h>
using namespace std;
const int N = (int)5e3 + 3;
const long long mod = 998244353;
long long pw(long long x, long long k) {
  long long res = 1;
  while (k) {
    if (k & 1) res = res * x % mod;
    x = x * x % mod;
    k >>= 1;
  }
  return res;
}
int n, m, k;
long long fac[N], ifac[N];
long long mgf[N], mgf2[N];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  fac[0] = ifac[0] = 1;
  for (auto i = (1); i < (N); i++) {
    fac[i] = fac[i - 1] * i % mod;
    ifac[i] = ifac[i - 1] * pw(i, mod - 2) % mod;
  }
  cin >> n >> m >> k;
  if (n < N) {
    long long ans = 0;
    for (int x = 0; x <= n; x++) {
      long long curr = pw(x, k);
      curr *= fac[n] * ifac[x] % mod * ifac[n - x] % mod;
      curr %= mod;
      curr *= pw(m - 1, n - x);
      ans += curr % mod;
    }
    ans = ans % mod * pw(pw(m, mod - 2), n) % mod;
    cout << ans << endl;
    return 0;
  }
  long long p = pw(m, mod - 2), q = 1 - p;
  mgf[0] = 1;
  for (auto iter = (0); iter < (k); iter++) {
    memset(mgf2, 0, sizeof(mgf2));
    for (auto i = (0); i <= (iter); i++) {
      long long cc = (n - i) * 1ll * p % mod;
      mgf2[i + 1] += cc * mgf[i] % mod;
      mgf2[i] += mgf[i] * i % mod;
    }
    for (auto i = (0); i <= (iter + 1); i++) mgf2[i] %= mod;
    memcpy(mgf, mgf2, sizeof(mgf));
  }
  long long ans = 0;
  for (auto i = (0); i < (N); i++) ans += mgf[i];
  cout << ans % mod << endl;
  return 0;
}
