#include<bits/stdc++.h>
#define int long long
#define mem(x) memset(x,0,sizeof(x))
using namespace std;
int read(){
int s = 0,w = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
return s * w;
}
struct node{
int w;
int id;
}e[1000010],e1[1000010];
int n,m;
int ans;
int num;
int num1;
int cnt;
int cnt1;
bool cmp(node x,node y){
return x.w > y.w;
}
signed main(){
cin>>n>>m;
for(int i = 1;i <= n;i ++){
int v,w;
v = read(),w = read();
if(v == 1){
cnt ++;
e[cnt].w = w;
e[cnt].id = i;
}
else {
cnt1 ++;
e1[cnt1].w = w;
e1[cnt1].id = i;
}
}
sort(e + 1,e + cnt + 1,cmp);
sort(e1 + 1,e1 + cnt1 + 1,cmp);
for(int i = 0;i <= cnt;i ++){
if((m - i) % 2 == 1)continue;
int cs1,cs2;
cs1 = i;
cs2 = (m - i) / 2;
if(cs2 < 0)continue;
if(cs2 > cnt1)continue;
int s = 0;
if(cs1 != 0)for(int j = 1;j <= cs1;j ++)s += e[j].w;
if(cs2 != 0)for(int j = 1;j <= cs2;j ++)s += e1[j].w;
if(s > ans){
ans = s;
num = cs1;
num1 = cs2;
}
}
cout<<ans<<endl;
for(int i = 1;i <= num;i ++)cout<<e[i].id<<" ";
for(int i = 1;i <= num1;i ++)cout<<e1[i].id<<" ";
return 0;
}