#include <bits/stdc++.h>
using namespace std;
inline int power(int a, int t) {
  int res = 1;
  while (t) {
    if (t & 1) res = (long long)res * a % 998244353;
    a = (long long)a * a % 998244353;
    t >>= 1;
  }
  return res;
}
int n, m, k, cnt;
int f[10000003], inv[10000003], pw[10000003], pr[10000003 >> 1], c[10000003];
int solve1() {
  int mul = (long long)power(998244353 + 1 - m, n - 1) * m % 998244353,
      invq = power(998244353 + 1 - m, 998244353 - 2), res = 0;
  for (register int i = 1; i <= n; ++i) {
    res = (res + (long long)mul * c[i] % 998244353 * pw[i]) % 998244353;
    mul = (long long)mul * invq % 998244353 * m % 998244353;
  }
  return res;
}
int solve2() {
  int c2, mul, res = 0;
  mul = c2 = f[k] = 1;
  for (register int i = k - 1; i; --i) {
    c2 = (long long)c2 * (n - i - 1) % 998244353 * inv[k - i] % 998244353;
    mul = (long long)mul * (998244353 - m) % 998244353;
    f[i] = ((long long)c2 * mul + (long long)(998244353 + 1 - m) * f[i + 1]) %
           998244353;
  }
  mul = m;
  for (register int i = 1; i <= k; ++i) {
    res = (res + (long long)pw[i] * c[i] % 998244353 * mul % 998244353 * f[i]) %
          998244353;
    mul = (long long)mul * m % 998244353;
  }
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  m = power(m, 998244353 - 2);
  c[0] = inv[1] = pw[1] = 1;
  c[1] = n;
  for (register int i = 2; i <= k; ++i) {
    inv[i] =
        (long long)(998244353 - 998244353 / i) * inv[998244353 % i] % 998244353;
    c[i] = (long long)c[i - 1] * inv[i] % 998244353 * (n - i + 1) % 998244353;
    if (!pw[i]) {
      pr[++cnt] = i;
      pw[i] = power(i, k);
    }
    for (register int j = 1; j <= cnt && (long long)i * pr[j] <= k; ++j) {
      pw[i * pr[j]] = (long long)pw[i] * pw[pr[j]] % 998244353;
      if (i % pr[j] == 0) break;
    }
  }
  if (n <= k + 1)
    printf("%d", solve1());
  else
    printf("%d", solve2());
  return 0;
}
