#include <bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
using namespace std;
const long double eps = 1e-7;
const int inf = 1000000010;
const long long INF = 10000000000000010LL;
const int mod = 998244353;
const int MAXN = 5010, LOG = 20;
long long n, m, k, u, v, x, y, t, a, b, ans;
long long dp[MAXN][MAXN];
long long F[MAXN];
long long powmod(long long a, long long b) {
  if (!b) return 1;
  if (b & 1) return a * powmod(a * a % mod, b >> 1) % mod;
  return powmod(a * a % mod, b >> 1);
}
long long C(long long n, long long r) {
  if (r < 0 || r > n) return 0;
  long long res = 1;
  for (long long i = n; i > n - r; i--) res = res * i % mod;
  res = res * powmod(F[r], mod - 2) % mod;
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  dp[0][0] = 1;
  for (int i = 1; i < MAXN; i++)
    for (int j = 1; j <= i; j++)
      dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j] * j) % mod;
  F[0] = 1;
  for (int i = 1; i < MAXN; i++) F[i] = F[i - 1] * i % mod;
  cin >> n >> m >> k;
  long long M = powmod(m, mod - 2);
  long long tmp = 1;
  for (int i = 1; i <= k; i++) {
    tmp = tmp * M % mod;
    ans += ((dp[k][i] * F[i] % mod) * tmp % mod) * C(n, i) % mod;
  }
  ans %= mod;
  cout << ans << '\n';
  return 0;
}
