#include <bits/stdc++.h>
using namespace std;
const int N = 50005;
const int mod = 998244353;
int add(int x, int y) { return ((x + y) % mod + mod) % mod; }
int mul(int x, int y) { return (long long)x * y % mod; }
int mypow(int x, int c) {
  int ret = 1;
  while (c > 0) {
    if (c & 1) {
      ret = mul(ret, x);
    }
    c /= 2;
    x = mul(x, x);
  }
  return ret;
}
int dp[2][N];
void solve() {
  int n, m, k;
  scanf("%d %d %d ", &n, &m, &k);
  if (n == 1) {
    cout << 1 << endl;
    return;
  }
  int ret = 0, parity = 0;
  int prop = mypow(m, mod - 2), np = add(1, prop);
  dp[0][k] = 1;
  for (int iter = 0; iter < k; ++iter) {
    int nparity = parity ^ 1;
    for (int j = 1; j <= k + 1; ++j) dp[nparity][j] = 0;
    for (int j = 0; j <= k + 1; ++j) {
      int i = n + j - k, val = dp[parity][j];
      int rem = n - i;
      if (i < 0 || rem < 0) continue;
      if (i - 1 >= 0) {
        dp[nparity][j - 1] = add(dp[nparity][j - 1], mul(i, val));
      }
      dp[nparity][j] = add(dp[nparity][j], mul(rem, val));
    }
    parity = nparity;
  }
  int t = mypow(m - 1, mod - 2);
  for (int j = 0; j <= k; ++j) {
    int i = n + j - k, val = dp[parity][j];
    int rem = n - i;
    if (i < 0 || rem < 0) continue;
    ret = add(ret, mul(dp[parity][j], mul(mypow(t, rem), mypow(t + 1, i))));
  }
  int u = mul(mypow(m, mod - 2), m - 1);
  ret = mul(ret, mypow(u, n));
  printf("%d\n", ret);
}
int main() {
  solve();
  return 0;
}
