def to_list(cons_cell: tuple) -> list: res = [] x = cons_cell while x is not None: a, x = x res.append(a) return res def recur_dp(p, dp): if p == len(costs): if (K, D) in dp: return True, K, D, None return False, 0, 0, None cost = costs[p] pp = dp.copy() dp, pp = pp, dp for k, d in pp: if k == K: continue if d + cost > D: continue dp.add((k+1, d+cost)) ok, rk, rd, path = recur_dp(p+1, dp) if not ok: return ok, rk, rd, path # 復元 for k, d in pp: if k+1 == rk and d+cost == rd: return ok, rk-1, rd-cost, (cost, path) return ok, rk, rd, path N, D, K = map(int, input().split()) costs = list(reversed(range(1, N+1))) # 辞書順参照を求めるので逆順にする dp = {(0, 0)} # (個数, 総和) ok, _, _, path = recur_dp(0, dp) if ok: ans = to_list(path)[::-1] print(*ans) else: print(-1)