#include <bits/stdc++.h>
using namespace std;
struct sr {
  int t, p, id1, id2;
  sr() { t = p = id1 = id2 = 0; }
  bool operator<(const sr &sec) const { return p < sec.p; }
} arr1[100002] = {}, arr2[100002] = {};
int q1 = 0, q2 = 0;
stack<int> ret;
int main() {
  int n, v, use = 0;
  cin >> n >> v;
  for (int i = 0; i < n; i++) {
    sr tec;
    cin >> tec.t >> tec.p;
    tec.id1 = i + 1;
    if (tec.t == 1) {
      arr1[q1++] = tec;
    } else
      arr2[q2++] = tec;
  }
  sort(arr1, arr1 + q1);
  if (v & 1 && q1) {
    q1--;
    v--;
    use += arr1[q1].p;
    ret.push(arr1[q1].id1);
  }
  while (q1 > 1) {
    sr tec;
    tec.p = arr1[q1 - 1].p + arr1[q1 - 2].p;
    tec.id1 = arr1[q1 - 1].id1;
    tec.id2 = arr1[q1 - 2].id1;
    arr2[q2++] = tec;
    q1 -= 2;
  }
  if (q1) {
    arr2[q2++] = arr1[0];
  }
  sort(arr2, arr2 + q2);
  while (v > 1 && q2) {
    v -= 2;
    use += arr2[q2 - 1].p;
    ret.push(arr2[q2 - 1].id1);
    if (arr2[q2 - 1].id2) ret.push(arr2[q2 - 1].id2);
    q2--;
  }
  cout << use << endl;
  while (!ret.empty()) {
    cout << ret.top() << " ";
    ret.pop();
  }
  return 0;
}
