"use strict";
var input = require("fs").readFileSync("/dev/stdin", "utf8");
var cin = input.trim().split(/ |\n/), cid = 0;

function main() {
    let N = +cin.shift();
    let M = +cin.shift();
    let K = +cin.shift();
    let mod_base = 998244353;
    // ans = M * Sigma (C(N-1,K)*(M-1)^(N-K) ) % mod_base
    let y = Array(K + 1).fill(0);
    let z = Array(N).fill(0);
    y[0] = 1;
    for (let i = 0; i < K; i++) {
        // y[i + 1] = (y[i] * (N - i - 1) / (i + 1) ) % mod_base;
        let j = inv(i + 1, mod_base);
        //console.log("inv:", i + 1, "->", j);
        y[i + 1] = (y[i] * (N - i - 1) * j) % mod_base;
    }
    z[N - 1] = 1;
    for (let i = N - 2; i >= 0; i--) {
        z[i] = (z[i + 1] * (M - 1)) % mod_base;
    }
    //console.log({ y });
    let ans = 0;
    for (let i = 0; i < K + 1; i++) {
        ans += y[i] * z[i];
    }
    ans = (M * ans) % mod_base;
    console.log(ans);
}
function inv(x, mod_base) {
    // 1/x == x^(mod_base-2) // 互いに素な場合
    return pow(x, mod_base - 2);
    function pow(x, y) {
        if (y == 0) return 1;
        if (y == 1) return x;
        let t = (pow(x, y >> 1) ** 2) % mod_base;
        if (y & 1) t = (t * x) % mod_base;
        //console.log({ x, y, t });
        return t;
    }
}
main();
