#include <bits/stdc++.h>
using namespace std;
const int ksz = 5e3, mod = 998244353;
bool o = 0, x = 1;
int n, m, c;
long long dp[2][ksz][2], ans;
long long inline qpow(long long a, long long p) {
  long long res = 1;
  for (; p > 0; p >>= 1) {
    if (p & 1) {
      res *= a;
      res %= mod;
    }
    a *= a;
    a %= mod;
  }
  return res;
}
long long inline inv(long long a) { return qpow(a, mod - 2); }
long long& f(int k, int a, int b) {
  int p = a <= b ? 0 : 1, mn = min(a, b);
  return dp[k][mn][p];
}
void inline init() {
  for (int a = max(0, n - c); a <= n; ++a) {
    int b = n - a;
    f(o, a, b) = qpow(m, a);
  }
  for (int k = c - 1; k >= 0; --k) {
    for (int a = max(0, n - k); a <= n; ++a) {
      int b = n - a;
      f(x, a, b) = (a - 1 >= 0 ? a * f(o, a - 1, b + 1) : 0) % mod +
                   b * f(o, a, b) % mod;
      f(x, a, b) %= mod;
    }
    swap(o, x);
    memset(dp[x], 0, sizeof(dp[x]));
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m >> c;
  init();
  ans = inv(qpow(m, n)) * f(o, n, 0) % mod;
  cout << ans << '\n';
}
