solve :: [Integer] -> Integer -> [[Integer]] solve [] _ = [] solve xs lim = (map (init xs ++) (map return [last xs .. lim])) ++ map (++[lim]) (solve (init xs) (lim - 1)) main = do [n, d, k] <- return . map read . words =<< getLine let res = filter ((== d) . sum) $ solve [1..k] n putStrLn $ if null res then "-1" else unwords (map show (head res))