#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N = 100100;
struct point {
  int id, val, sum;
} a[N], b[N];
bool cmp(point x, point y) { return x.val > y.val; }
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  int na = 0;
  int nb = 1;
  b[0].val = 0;
  for (int i = 1; i <= n; ++i) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      scanf("%d", &a[na].val);
      a[na++].id = i;
    } else {
      scanf("%d", &b[nb].val);
      b[nb++].id = i;
    }
  }
  sort(a, a + na, cmp);
  sort(b + 1, b + nb, cmp);
  for (int i = 0; i < na; ++i) {
    if (i == 0)
      a[i].sum = a[i].val;
    else
      a[i].sum = a[i - 1].sum + a[i].val;
  }
  int sum = 0;
  int ia = 0;
  int ib = 1;
  int ans = 0;
  for (int i = 0; i < nb && 2 * i <= m; ++i) {
    sum += b[i].val;
    int id = min(m - 2 * i - 1, na - 1);
    int tmp = sum;
    if (id >= 0) tmp += a[id].sum;
    if (tmp > ans) {
      ans = tmp;
      ia = id + 1;
      ib = i + 1;
    }
  }
  printf("%d\n", ans);
  for (int i = 0; i < ia; ++i) printf("%d ", a[i].id);
  for (int i = 1; i < ib; ++i) printf("%d ", b[i].id);
  puts("");
  return 0;
}
