#include <bits/stdc++.h>
using namespace std;
struct node
{
int name,pri;
}a[100009],b[100009];
int n,asiz=0,bsiz=0,v,astart=0,bstart=0;
int ans=0;
int af[100001],bf[100001],
an[100001],bn[100001];
int le,ri;
bool cmp(node A,node B)
{
return A.pri>B.pri;
}
int main()
{
cin>>n>>v;
for(int i=1;i<=n;i++)
{
int siz;cin>>siz;
if(siz==1)
{
cin>>a[++asiz].pri;
a[asiz].name=i;
}
else
{
cin>>b[++bsiz].pri;
b[bsiz].name=i;
}
}
sort(a+1,a+asiz+1,cmp);
sort(b+1,b+bsiz+1,cmp);
for(int i=1;i<=asiz;i++)
af[i]=af[i-1]+a[i].pri,
an[i]=a[i].name;
for(int i=1;i<=bsiz;i++)
bf[i]=bf[i-1]+b[i].pri,
bn[i]=b[i].name;
for(int i=1;i<=min(v,asiz);i++)
{
int j=min((v-i)/2,bsiz);
if(i+j*2>v) continue;
if(af[i]+bf[j]>ans)
{
ans=af[i]+bf[j];
le=i;
ri=j;
}
}
cout<<ans<<endl;
for(int i=1;i<=le;i++) cout<<an[i]<<" ";
for(int i=1;i<=ri;i++) cout<<bn[i]<<" ";
return 0;
}
实在找不到有啥错误。