#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;
int c, n, bestv,cw,cv;
int is[maxn];
struct node
{
double num, w, v, aver;
}p[maxn];
bool cmp(const node a, const node b)
{
return a.aver>b.aver;
}
double bound(int i)
{
double lw = c-cw;
double r = cv;
while(i <= n && p[i].w <= lw)
{
lw -= p[i].w;
r += p[i].v;
i++;
}
if(i <= n) r += p[i].aver*lw;
return r;
}
void backtrack(int i)
{
bound(i);
if(i > n){
bestv = cv;
return;
}
if(cw + p[i].w <= c)
{
cw += p[i].w;
cv += p[i].v;
int t = p[i].num;
is[t] = 1;
backtrack(i+1);
cw-=p[i].w;
cv-=p[i].v;
is[t]=0;
}
if(bound(i+1)>bestv) backtrack(i+1);
}
void print()
{
for(int i = 1; i <= n; i++)
{
if(is[i])printf("%d ",i);
}
}
int va[maxn];
int main()
{
bestv = 0, cw = 0, cv = 0;
scanf("%d%d",&n,&c);
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&p[i].v,&p[i].w);
p[i].num = i;
p[i].aver = p[i].v/p[i].w;
}
sort(p+1,p+n+1,cmp);
backtrack(1);
cout<<"最优价值为 "<<bestv<<endl;
cout<<"装入";
print();
cout<<endl;
}
/*
4 8
3 2
4 3
5 4
6 5
*/