import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution2 { static Long[][] answers; static long mod(long x) { return x % 1000000007L; } static long solve(int length, int k, int match) { if (answers[length][match] != null) { return answers[length][match]; } int firstHalf = (length + 1) / 2; int secondHalf = length + 1 - firstHalf; long answer = 0; if (match == 1) { long matchSolve = mod(solve(firstHalf, k, 1) * solve(secondHalf, k, 1)); long unmatchSolve = mod(solve(firstHalf, k, 0) * solve(secondHalf, k, 0)); answer = mod(matchSolve + (k - 1) * unmatchSolve); } else { long match1Solve = mod(solve(firstHalf, k, 1) * solve(secondHalf, k, 0)); long match2Solve = mod(solve(firstHalf, k, 0) * solve(secondHalf, k, 1)); long unmatchSolve = mod(solve(firstHalf, k, 0) * solve(secondHalf, k, 0)); answer = mod(match1Solve + match2Solve + (k - 2) * unmatchSolve); } answers[length][match] = answer; return answer; } static long countArray(int n, int k, int x) { answers = new Long[n + 1][2]; answers[1][0] = 0L; answers[1][1] = 1L; answers[2][1] = 0L; answers[2][0] = 1L; return solve(n, k, x == 1 ? 1 : 0); } 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(); } }