#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &x) {
  x = 0;
  bool f = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = 1;
  for (; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
  if (f) x = -x;
}
template <typename F>
inline void write(F x) {
  static short st[30];
  short tp = 0;
  if (x < 0) putchar('-'), x = -x;
  do st[++tp] = x % 10, x /= 10;
  while (x);
  while (tp) putchar('0' | st[tp--]);
  putchar('\n');
}
template <typename T>
inline void Mx(T &x, T y) {
  x < y && (x = y);
}
template <typename T>
inline void Mn(T &x, T y) {
  x > y && (x = y);
}
const int P = 998244353;
const int N = 5005;
long long S[N][N], mi[N], p, n, k;
long long fpw(long long x, long long mi) {
  long long res = 1;
  while (mi) {
    if (mi & 1) res = res * x % P;
    x = x * x % P, mi >>= 1;
  }
  return res;
}
long long A(long long n, long long m) {
  long long up = 1;
  for (long long i = n; i >= n - m + 1; i--) up = up * i % P;
  return up;
}
int main() {
  read(n), read(p), read(k);
  S[1][1] = 1;
  p = fpw(p, P - 2);
  for (int i = 2; i <= k; i++)
    for (int j = 1; j <= i; j++)
      S[i][j] = (j * S[i - 1][j] + S[i - 1][j - 1]) % P;
  long long ans = 0, fac = 1;
  for (int i = 1; i <= min(n, k); i++) {
    fac = fac * i % P;
    ans = (ans + S[k][i] * A(n, i) % P * fpw(p, i)) % P;
  }
  write(ans);
  return 0;
}
