#include<bits/stdc++.h>
using namespace std;
long long st(long long m, long long n){
    if(n==0){
        return 1;
    }
    if(n==1){
        return m;
    }
    if(n%2==0){
        long long st1=st(m,n/2);
        return st1*st1%998244353;
    }else{
        long long st1=st(m,n/2);
        return ((st1*m)%998244353)*st1%998244353;
    }
}
int m,k;
long long x[1000001];
long long f(int n){
    if(n<k){
        return 0;
    }
    if(n==k){
        return m;
    }
    if(x[n]!=0){
        return x[n];
    }
    long long a=m*f(n-1)%998244353;
    long long b=(st(m,n-k)-f(n-k))%998244353*(m-1)%998244353;
    if(b<0){
        b=b+998244353;
    }
    x[n]=(a+b)%998244353;
    return x[n];
}
int main(){
    int n;
    cin>>n>>m>>k;
    if(k==1){
        cout<<st(m,n);
        return 0;
    }
    if(k==2){
        long long r=(st(m,n)-(m*st(m-1,n-1))%998244353)%998244353;
        if(r<0){
            cout<<r+998244353;
        }else{
            cout<<r;
        }
        return 0;
    }
    cout<<f(n);
return 0;
}
/*
#include<bits/stdc++.h>
using namespace std;
long long st(long long m, long long n){
    if(n==0){
        return 1;
    }
    if(n==1){
        return m;
    }
    if(n%2==0){
        long long st1=st(m,n/2);
        return st1*st1%998244353;
    }else{
        long long st1=st(m,n/2);
        return ((st1*m)%998244353)*st1%998244353;
    }
}
int m,k;
long long x[100001];
long long f(int n){
    if(n<k){
        return 0;
    }
    if(n==k){
        return m;
    }
    long long a=m*f(n-1)%998244353;
    long long b=(st(m,n-k)-f(n-k))*(m-1)%998244353;
    if(b<0){
        b=b+998244353;
    }
    return (a+b)%998244353;
}
int main(){
    int n,k;
    cin>>n>>m>>k;
    cout<<f(n);
return 0;
}
*/
