#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))%998244353*(m-1)%998244353;
    if(b<0){
        b=b+998244353;
    }
    return (a+b)%998244353;
}
int main(){
    int n;
    cin>>n>>m>>k;
    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;
}
*/
