def solve():
import sys
# 读取输入:兼容多空格/换行分隔的输入格式,拆分后转为列表
input = sys.stdin.read().split()
n = int(input[0]) # 目标构造数组的长度
a = int(input[1]) # 核心约束参数1
k = int(input[2]) # 核心约束参数2(需要满足范围限制)
# 处理n=1的特殊边界情况
if n == 1:
# 数组长度为1时,仅当a等于k时合法,输出a;否则无解输出-1
if a == k:
print(a)
else:
print(-1)
return
# 计算k的合法取值范围:超出范围则无法构造数组,输出-1
mini = (a + 1) // 2 # k的最小值(整数除法,对应C++的(a+1)/2截断规则)
maxi = a - n // 2 # k的最大值(n//2是n除以2的整数部分)
# 检查k是否在[mini, maxi]范围内,超出则输出-1
if k > maxi or k < mini:
print(-1)
return
# 初始化数组最后两个元素的初始值
lf = 1 # 倒数第二个元素的初始值
# 位运算n&1:判断n的奇偶性(奇数结果为1,偶数结果为0)
# rt初始值:n为奇数时rt=0,n为偶数时rt=1
rt = 1 - (n & 1)
# 调整k和a的数值,适配后续计算规则
k -= n // 2 # k减去n的半长(整数部分)
a -= (n // 2) * 2 # a减去2倍的n半长(保证a为偶数/奇数适配)
# 计算数组最后两个元素的最终值
lf += a - k # 倒数第二个元素的最终值
rt += k # 最后一个元素的最终值
# 构造输出结果列表:避免多次print的IO开销,先收集再拼接
output = []
# 前n-2个元素固定为"1"(数组长度>2时生效,长度=2时无此部分)
# range(2, n):遍历从2到n-1(左闭右开),共n-2个元素
for i in range(2, n):
output.append("1")
# 添加最后两个元素(lf和rt)
output.append(str(lf))
output.append(str(rt))
# 拼接所有元素为字符串,空格分隔输出
print(' '.join(output))
# 程序入口:仅当脚本直接运行时执行solve函数
if __name__ == "__main__":
solve()