#include <iostream>
using namespace std;
const int MAXN=1e6+10;
const long long mod=998244353;
long long dp[MAXN], st[MAXN];
int main () {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    long long n, m, k;
    cin >> n >> m >> k;
    long long cursum=1;
    dp[1]=1;
    st[1]=m;
    for (long long i=2;i<=n;i++) {
        if (i>=k) cursum=(cursum-dp[i-k]+mod)%mod;
        if (i>=k) dp[i]=(cursum*(m-1ll))%mod;
        else dp[i]=(dp[i-1]*m)%mod;
        cursum=(cursum+dp[i])%mod;
        st[i]=(st[i-1]*m)%mod;
    }
    dp[n]=(dp[n]*m)%mod;
    cout << (st[n]-dp[n]+mod)%mod << endl;
    return 0;
}
