#include<bits/stdc++.h>
using namespace std;#definedbdouble#definelllonglong#definePirpair<int,int>#definefifirst#definesesecond#definepbpush_back#definem_pmake_pair#defineinf0x3f3f3f3f#defineINF0x3f3f3f3f3f3f3f3f/*==========ACMer===========*/constint N =1005;int f[N][N];int n, m;int v[N], w[N];intmain(){scanf("%d %d",&n,&m);for(int i =1; i <= n; i ++)scanf("%d %d",&v[i],&w[i]);for(int i = n; i >=1; i --){//倒着来可以 正好形成字典序最小的情况for(int j =0; j <= m; j ++){
f[i][j]= f[i +1][j];if(j >= v[i]){
f[i][j]=max(f[i][j], f[i +1][j - v[i]]+ w[i]);}}}for(int i =1; i <= n; i ++){if(i == n && m >= v[i]){//对于最后一个物品我我们的状态转移方程 是比较特殊的(背包可以不被填满,对于第一个物品来说), 因此我们特判第一个物品printf("%d", n);break;}if(m <=0)break;//特判if(m >= v[i]&& f[i][m]== f[i +1][m - v[i]]+ w[i]){printf("%d ", i);
m -= v[i];}}return0;}