import java.io.*; import java.util.*; public class Solution { private static PrintWriter out; public static void main(String[] args) throws Exception { out = new PrintWriter(System.out); new Solution().solve(); out.close(); } private BufferedReader reader; private StringTokenizer st; private static final long MOD = (long)1e9 + 7; private int n, k, x; private long[] dp; private void solve() throws Exception { Scanner in = new Scanner(System.in); int n = in.nextInt(); int k = in.nextInt(); int x = in.nextInt(); in.close(); dp = new long[n]; dp[1] = (x == 1) ? 0 : 1; dp[2] = (x == 1) ? k - 1 : k - 2; for (int i = 3; i < n; ++i) { dp[i] = ((dp[i - 2] * (k - 1)) % MOD + (dp[i - 1] * (k - 2)) % MOD) % MOD; } out.println(dp[n - 1]); } }