#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(int x=0,bool f=1){
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=0;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
return f?x:-x;
}
int n,v,a,b,n1,n2,ans,sum1[100005],sum2[100005],p1,p2;
struct node{
int id,val;
}v1[100005],v2[100005];
bool cmp(const node &x,const node &y){
return x.val>y.val;
}
main(){
n=read(),v=min(read(),200001ll);
for(int i=1;i<=n;i++){
a=read(),b=read();
a==2?v2[++n2].val=b,v2[n2].id=i
:v1[++n1].val=b,v1[n1].id=i;
}
sort(v1+1,v1+n1+1,cmp),sort(v2+1,v2+n2+1,cmp);
for(int i=1;i<=n1;i++)
sum1[i]=sum1[i-1]+v1[i].val;
for(int i=1;i<=n2;i++)
sum2[i]=sum2[i-1]+v2[i].val;
for(int i=0;i<=min(n1,v);i++)
if(ans<sum1[i]+sum2[min(n2,(v-i)>>1)])
ans=sum1[i]+sum2[min(n2,(v-i)>>1)],p1=i,p2=min(n2,(v-i)>>1);
printf("%lld\n",ans);
for(int i=1;i<=p1;i++)
printf("%lld ",v1[i].id);
for(int i=1;i<=p2;i++)
printf("%lld ",v2[i].id);
putchar(10);
return 0;
}