#include <bits/stdc++.h>
using namespace std;
int nCr[5010][5010] = {0}, n0, r;
int f[5010][5010] = {0};
int qpow(int a, int k) {
  if (k == 0) return 1;
  if (k == 1) return a;
  if (k & 1) return 1ll * qpow(a, k - 1) * a % 998244353;
  int res = qpow(a, k >> 1);
  return 1ll * res * res % 998244353;
}
inline int inv(int a) { return qpow(a, 998244353 - 2); }
int solve(int n, int k) {
  if (f[n0 - n][k]) return f[n0 - n][k];
  if (k == 0) return f[n0 - n][k] = qpow(1 + r, n);
  if (n == 1) return f[n0 - n][k] = 1;
  return f[n0 - n][k] =
             1ll * n *
             ((solve(n, k - 1) - solve(n - 1, k - 1) + 998244353) % 998244353) %
             998244353;
}
int main() {
  for (int i = 0; i < 5010; i++) {
    nCr[i][0] = 1;
    nCr[i][i] = 1;
  }
  for (int i = 2; i < 5010; i++)
    for (int j = 1; j < i; j++)
      nCr[i][j] = (nCr[i - 1][j] + nCr[i - 1][j - 1]) % 998244353;
  int n, k, m;
  cin >> n >> m >> k;
  if (m == 1) {
    cout << qpow(n, k);
    return 0;
  }
  r = inv(m - 1);
  n0 = n;
  cout << 1ll * (solve(n, k) - (k == 0)) *
              qpow(1ll * (m - 1) * inv(m) % 998244353, n) % 998244353;
  return 0;
}
