#include <bits/stdc++.h>

using namespace std;

#ifdef KACTL
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define sz(x) (int)(x).size()
#endif
#define all(x) begin(x), end(x)

using ll = int64_t;
using ld = long double;
using pii = pair<int32_t, int32_t>;
using vi = vector<int32_t>;

struct modint {
    static constexpr int MOD = 998244353;

    static ll fix(ll x) {
        x %= MOD;
        if (x < 0) x += MOD;
        return x;
    }

    ll v;
    modint(const ll _v = 0): v(fix(_v)) {}

    modint(const modint& other) {
        v = other.v;
    }

    bool operator<(const modint& other) const { return v < other.v; }
    bool operator>(const modint& other) const { return v > other.v; }
    bool operator<=(const modint& other) const { return v <= other.v; }
    bool operator>=(const modint& other) const { return v >= other.v; }
    bool operator==(const modint& other) const { return v == other.v; }
    bool operator!=(const modint& other) const { return v != other.v; }

    modint& operator+=(const modint& other) {
        v += other.v;
        if (v >= MOD)
            v -= MOD;
        return *this;
    }

    modint& operator-=(const modint& other) {
        v -= other.v;
        if (v < 0)
            v += MOD;
        return *this;
    }

    modint& operator*=(const modint& other) {
        v = 1LL * v * other.v % MOD;
        return *this;
    }

    modint& operator/=(const modint& other) {
        *this *= other.inv();
        return *this;
    }

    modint operator+(const modint& other) const {
        return modint(v) += other;
    }

    modint operator-(const modint& other) const {
        return modint(v) -= other;
    }

    modint operator*(const modint& other) const {
        return modint(v) *= other;
    }

    modint operator/(const modint& other) const {
        return modint(v) /= other;
    }

    static modint pow(const modint& b, ll e) {
        if (e == 0) return 1;
        modint x = pow(b * b, e / 2);
        return (e % 2) ? b * x : x;
    }

    modint pow(ll e) const {
        return pow(*this, e);
    }

    modint inv() const {
        return pow(MOD - 2);
    }

    friend istream& operator>>(istream& is, modint& m) {
        ll x;
        is >> x;

        m.v = fix(x);

        return is;
    }

    friend ostream& operator<<(ostream& os, const modint& m) {
        return os << m.v;
    }
};

constexpr int MAXN = 2e5 + 5;
modint fact[MAXN], tcaf[MAXN];

void gen_fact() {
    fact[0] = 1;
    for (int i = 1; i < MAXN; ++i) {
        fact[i] = fact[i - 1] * i;
    }

    tcaf[MAXN - 1] = modint(1) / fact[MAXN - 1];
    for (int i = MAXN - 2; i >= 0; --i) {
        tcaf[i] = tcaf[i + 1] * (i + 1);
    }
}

modint choose(int n, int k) {
    assert(n >= 0);
    assert(0 <= k and k <= n);

    return fact[n] * tcaf[k] * tcaf[n - k];
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    gen_fact();

    ll n, m, k;
    cin >> n >> m >> k;

    modint ans = 0;
    for (int s = 0; s <= k; ++s) {
        ans += modint::pow(m - 1, n - 1 - s) * choose(n - 1, s);
    }

    cout << ans * m << '\n';

    return 0;
}


Measured memory_bytes: 6820