#include <bits/stdc++.h>
using namespace std;
struct borne {
  int p = 0, id;
  bool operator<(borne a) const { return a.p < p; }
};
int main() {
  int n, v;
  cin >> n >> v;
  int t;
  borne b1[n];
  borne b2[n];
  int i1 = 0, i2 = 0;
  for (int i = 0; i < n; i++) {
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d", &b1[i1].p);
      b1[i1].id = i + 1;
      i1++;
    } else {
      scanf("%d", &b2[i2].p);
      b2[i2].id = i + 1;
      i2++;
    }
  }
  sort(b1, b1 + i1);
  sort(b2, b2 + i2);
  int sum1[i1 + 1], sum2[i2 + 1];
  sum1[0] = 0;
  for (int i = 1; i <= i1; i++) {
    sum1[i] = sum1[i - 1] + (int)b1[i - 1].p;
  }
  sum2[0] = 0;
  for (int i = 1; i <= i2; i++) {
    sum2[i] = sum2[i - 1] + (int)b2[i - 1].p;
  }
  int m = 0;
  if (i1 > v) i1 = v;
  int max1 = 0, max2 = 0, tsum;
  for (int i = 0; i <= i1; i++) {
    int l = (v - i) / 2;
    if (l > i2) l = i2;
    tsum = sum1[i] + sum2[l];
    if (tsum > m) {
      m = tsum;
      max1 = i;
      max2 = l;
    }
  }
  cout << m << endl;
  for (int i = 0; i < max1; i++) {
    cout << b1[i].id << " ";
  }
  for (int i = 0; i < max2; i++) {
    cout << b2[i].id << " ";
  }
  return 0;
}
