#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e7 + 10, M = 998244353;
int n, m, k, inv[Maxn], s[Maxn], idk[Maxn];
int mo2(int x) { return (x < 0) ? x + M : x; }
int fpow(int a, int p = M - 2) {
  int ret = 1;
  for (; p; p >>= 1, a = 1ll * a * a % M)
    if (p & 1) ret = 1ll * ret * a % M;
  return ret;
}
void init(int n) {
  inv[1] = 1;
  for (int i = 2; i <= n; i++) inv[i] = M - 1ll * inv[M % i] * (M / i) % M;
}
void get_idk(int k) {
  for (int i = 0; i <= k; i++) idk[i] = fpow(i, k);
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  int p = fpow(m);
  init(k);
  s[k] = 1;
  int pw = 1, C = 1;
  for (int i = k - 1; i >= 0; i--) {
    pw = 1ll * pw * (M - p) % M;
    C = 1ll * C * (n - i - 1 + M) % M * inv[k - i] % M;
    s[i] = (1ll * (1 - p + M) * s[i + 1] + 1ll * C * pw) % M;
  }
  int E = 0;
  pw = C = 1;
  get_idk(k);
  for (int i = 1; i <= k; i++) {
    pw = 1ll * pw * p % M;
    C = 1ll * C * (n - i + 1 + M) % M * inv[i] % M;
    E = (E + 1ll * idk[i] * C % M * pw % M * s[i]) % M;
  }
  printf("%d\n", E);
  return 0;
}
