import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { static long countArray(int n, int k, int x) { // Return the number of ways to fill in the array. long MOD = 1000000007; long[] ft = new long[n]; long[] f1 = new long[n]; ft[0] = 1; f1[0] = 1; k--; for (int i = 1; i < n; i++) { ft[i] = ft[i-1] * k % MOD; f1[i] = ((ft[i-1] - f1[i-1]) % MOD + MOD) % MOD; } if (x == 1) return f1[n-1]; return ((ft[n-1] - f1[n-1]) % MOD + MOD) % MOD * inv(k, MOD) % MOD; } private static long inv(long v, long MOD) { return (extendGCD(v, MOD)[0] % MOD + MOD) % MOD; } private static long[] extendGCD(long a, long b) { long[] ans = new long[3]; if (b == 0) { ans[0] = 1; ans[1] = 0; ans[2] = a; return ans; } long q = a / b; long r = a % b; long[] tmp = extendGCD(b, r); ans[2] = tmp[2]; ans[0] = tmp[1]; ans[1] = tmp[0] - q * ans[0]; return ans; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int k = in.nextInt(); int x = in.nextInt(); long answer = countArray(n, k, x); System.out.println(answer); in.close(); } }