#include<bits/stdc++.h>
using namespace std;

int main(){
    int m,n,k;
    cin>>m>>n>>k; //m根n种k异色

    if(k>n) {
        cout<<"Input Error\n";
        return 0;
    }

        // dp[i] 表示前 i 个柱子的合法染色方案数
    vector<long long> dp(m + 1, 0);
    dp[0] = 1; // 基础情况，方便计算

    for (int i = 1; i <= m; ++i) {
        // 枚举最后一段连续相同颜色的长度 j
        // j 的范围是 1 到 min(i, k-1)，因为不能有 k 个连续相同
        int max_j = min(i, k - 1);
        for (int j = 1; j <= max_j; ++j) {
            if (i == j) {
                // 如果整个前 i 个柱子颜色都相同（且 i < k，合法）
                // 有 n 种颜色可选
                dp[i] += n;
            } else {
                // 前 i-j 个柱子已经合法，最后 j 个柱子颜色相同
                // 且必须与第 i-j 个柱子颜色不同，所以有 (n-1) 种选择
                dp[i] += dp[i - j] * (n - 1);
            }
        }
    }

    cout << dp[m] << endl;
    return 0;
}