import Control.Applicative import Control.Monad import System.IO main :: IO () main = do n_temp <- getLine let n_t = words n_temp let n = read $ n_t!!0 :: Int let k = read $ n_t!!1 :: Int let x = read $ n_t!!2 :: Int print $ nef n k x co = 10^9 + 7 rieff (f,s) i n k x | n == 3 = if x == 1 then pred k else k - 2 | n == 4 = if x == 1 then flip rem co $ (k-1) * (k-2) else flip rem co $ k - 1 + (k - 2)^2 | n == i = if x == 1 then rem (pred k * s) co else pros | otherwise = rieff (s,pros) (succ i) n k x where pros = flip rem co $ (k - 2) * s + pred k * f nef n k = rieff (k - 2,flip rem co $ k - 1 + (k - 2)^2) 5 n k