#!/bin/python import sys def dfs(n, k, x, arr, pos, result): if pos == n - 1: result[0] += 1 return for i in xrange(1, k + 1): # should not be equal to previous element if arr[pos - 1] == i: continue # second to last element # should not be equal to last element if pos == n - 2 and arr[-1] == i: continue arr[pos] = i dfs(n, k, x, arr, pos + 1, result) arr[pos] = 0 def countArray(n, k, x): # Return the number of ways to fill in the array. arr = [0] * n arr[0] = 1 arr[-1] = x result = [0] if n <= 3: dfs(n, k, x, arr, 1, result) return result[0] dfs(3, k, x, arr, 1, result) initial = result[0] prev = result[0] cur = 0 for i in xrange(4, n + 1): if i % 2 == 0: if x == 1: cur = (prev - 1) * initial else: cur = (initial * prev) + (1 * (prev + 1)) else: if x == 1: cur = (prev + 1) * initial else: cur = (1 * (prev - 1)) + (initial * prev) cur %= (10**9 + 7) prev = cur return cur if __name__ == "__main__": n, k, x = raw_input().strip().split(' ') n, k, x = [int(n), int(k), int(x)] answer = countArray(n, k, x) print answer