'''
平方级复杂度求01背包最佳方案,注意迭代顺序
需要从小到大进行,中间需要记录每次决策时候
当前的物品到底选了还是没有选
'''n, v = map(int, input().split())
arr = []
for i in range(n):a, b = map(int, input().split())arr.append((a, b))# dp(i, j) 表示从i物品开始往后的所有物品中做选择,总大小不超过j的约束下,所有选法中价值总和的最大值
dp = [[0] * 1010 for _ in range(1010)]# choice(i, j) 表示从i物品开始往后的所有物品做选择,总大小不超多j的约束下,总价值最大的选法有没有选择物品i
choice = [[0] * 1010 for _ in range(1010)]for i in range(n-1, -1, -1):for j in range(v+1):if i == n-1:if j >= arr[i][0]:dp[i][j] = arr[i][1]choice[i][j] = 1else:dp[i][j] = 0choice[i][j] = 0else:if j < arr[i][0]:# 第i个物品没法选dp[i][j] = dp[i+1][j]choice[i][j] = 0else:if dp[i+1][j] <= dp[i+1][j-arr[i][0]] + arr[i][1]:# 第i个物品选择更优时候必须选择i物品# 第i个物品选和不选总价值都一样大,为了保持方案的字典序最小,也必须选择i物品dp[i][j] = dp[i+1][j-arr[i][0]] + arr[i][1]choice[i][j] = 1else:# 第i个物品不选更优dp[i][j] = dp[i+1][j]choice[i][j] = 0# 下面从前往后推导方案, 推导出构造出最优方案的路径(也就是每一个物品在最优方案里面到底选了还是没选)
ans = []
j = v
for i in range(n):if choice[i][j] == 1:ans.append(str(i+1))j -= arr[i][0]print(' '.join(ans))