#include <bits/stdc++.h>
using namespace std;
const int maxn = (int)(200005);
const long long mod = (long long)(998244353);
int fact[maxn], inv_fact[maxn];
int mul(long long a, long long b) {
  long long ret = (a * b) % mod;
  return (int)(ret);
}
int add(int a, int b) {
  int ret = a + b;
  if (ret >= mod) {
    ret -= mod;
  }
  return ret;
}
int poww(int a, int b) {
  int x = 1, y = a;
  while (b > 0) {
    if (b % 2 == 1) {
      x = mul(x, y);
    }
    y = mul(y, y);
    b /= 2;
  }
  return x;
}
void build() {
  fact[0] = 1;
  for (int i = 1; i < maxn; i++) {
    fact[i] = mul(fact[i - 1], i);
  }
  inv_fact[maxn - 1] = poww(fact[maxn - 1], mod - 2);
  for (int i = maxn - 2; i >= 0; i--) {
    inv_fact[i] = mul(inv_fact[i + 1], i + 1);
  }
}
int C(int n, int r) {
  int num = fact[n], den = mul(inv_fact[r], inv_fact[n - r]);
  return mul(num, den);
}
vector<int> upper;
int bigC(int n, int r) {
  int now = mul(upper[r], inv_fact[r]);
  return now;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  build();
  int n, m, k;
  cin >> n >> m >> k;
  int inv = poww(m, mod - 2), curr = inv, res = 0;
  vector<int> pows(5005);
  upper.resize(k + 1);
  upper[0] = 1;
  int last_used = n;
  for (int i = 1; i <= k; i++) {
    upper[i] = mul(upper[i - 1], last_used);
    last_used--;
  }
  for (int i = 1; i < pows.size(); i++) {
    pows[i] = poww(i, k);
  }
  for (int i = 1; i <= min(n, k); i++) {
    int now = mul(bigC(n, i), curr), tot = 0;
    int st = poww(mod - 1, i);
    for (int j = 0; j <= i; j++) {
      int zz = mul(C(i, j), mul(st, pows[j]));
      st = mul(st, mod - 1);
      tot = add(tot, zz);
    }
    curr = mul(curr, inv);
    res = add(res, mul(now, tot));
  }
  cout << res << endl;
  return 0;
}
