#include <bits/stdc++.h>
namespace imzzy {
class fastin {
 private:
  int _ch, _f;

 public:
  inline fastin& operator>>(char& c) {
    c = getchar();
    return *this;
  }
  template <typename _Tp>
  inline fastin& operator>>(_Tp& _x) {
    _x = 0;
    while (!isdigit(_ch)) _f |= (_ch == 45), _ch = getchar();
    while (isdigit(_ch))
      _x = (_x << 1) + (_x << 3) + (_ch ^ 48), _ch = getchar();
    _f && (_x = -_x, _f = 0);
    return *this;
  }
  fastin() { _ch = _f = 0; }
} fin;
}  // namespace imzzy
using namespace imzzy;
const long long mod = 998244353, inf = 1000000007000000007ll, debug = 0;
const int maxn = 5004, maxm = 1000004, maxv = 10000004;
inline long long powmod(long long a, long long b = mod - 2) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) (res *= a) %= mod;
    (a *= a) %= mod, b >>= 1;
  }
  return res;
}
long long s2[maxn][maxn];
signed main() {
  long long n, m, k, invm;
  fin >> n >> m >> k, invm = powmod(m);
  ;
  s2[0][0] = 1;
  for (register int i = 1; i <= k; ++i)
    for (register int j = 1; j <= k; ++j)
      s2[i][j] = (s2[i - 1][j - 1] + s2[i - 1][j] * j) % mod;
  long long ans = 0, tmp = 1;
  for (register int i = 0; i <= k; ++i)
    (ans += s2[k][i] * tmp) %= mod, (tmp *= (n - i) * invm % mod) %= mod;
  std::cout << ans;
  return 0;
}
