#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,cnt,cnt1,cnt2,ans,anss[100005];
struct node{
int num,name;}a[100005],b[100005];
bool cmp(node x,node y){return x.num>y.num;}
signed main()
{
cin>>n>>m;
int tmp,s=1,x=1,v=0;
for(int i=1;i<=n;i++)
{
cin>>tmp;
if(tmp/2)
{
cin>>b[++cnt2].num;
b[cnt2].name=i;
}
else
{
cin>>a[++cnt1].num;
a[cnt1].name=i;
}
}
sort(a+1,a+cnt1+1,cmp);
sort(b+1,b+cnt2+1,cmp);
if((m%2))
{
m--;
ans+=a[s].num;
anss[++cnt]=a[s].name;
s++;
}
while(v<m)
{
if(!(cnt1-s))
{
if(!(cnt2-x)) break;
else
{
ans+=b[x].num;
anss[++cnt]=b[x].name;
x++;
v+=2;
}
}
else if(cnt2<x)
{
if(!(cnt1-s)) break;
else
{
ans+=a[s].num;
ans+=a[s+1].num;
anss[++cnt]=a[s].name;
anss[++cnt]=a[s+1].name;
s+=2;
v+=2;
}
}
else
{
if(a[s].num+a[s+1].num>b[x].num)
{
ans+=a[s].num;
ans+=a[s+1].num;
anss[++cnt]=a[s].name;
anss[++cnt]=a[s+1].name;
s+=2;
v+=2;
}
else
{
ans+=b[x].num;
anss[++cnt]=b[x].name;
x++;
v+=2;
}
}
}
cout<<ans<<endl;
for(int i=1;i<=cnt;i++) cout<<anss[i]<<" ";
return 0;
}