#include <bits/stdc++.h>
using namespace std;
struct aaa {
  long long c, v;
};
struct bbb {
  long long c, v;
};
aaa a[100010];
bbb b[100010];
bool ccc(aaa a, aaa b) { return (a.v) > (b.v); }
bool cdc(bbb a, bbb b) { return (a.v) > (b.v); }
int main() {
  long long n, v;
  cin >> n >> v;
  long long n1 = 0;
  long long n2 = 0;
  for (long long i = 1; i <= n; i++) {
    long long g, gg;
    cin >> g >> gg;
    if (g == 1)
      a[++n1].c = i, a[n1].v = gg;
    else
      b[++n2].c = i, b[n2].v = gg;
  }
  sort(a + 1, a + 1 + n1, ccc);
  sort(b + 1, b + 1 + n2, cdc);
  for (long long i = 2; i <= n1; i++) a[i].v += a[i - 1].v;
  for (long long i = 2; i <= n2; i++) b[i].v += b[i - 1].v;
  a[0].v = 0;
  b[0].v = 0;
  long long ma = -2;
  long long g1, g2;
  for (long long i = 0; i <= n2 && 2 * i <= v; i++) {
    long long qq = v - 2 * i;
    if (qq >= n1) {
      if (a[n1].v + b[i].v > ma) {
        ma = a[n1].v + b[i].v;
        g1 = n1;
        g2 = i;
      }
    } else {
      if (a[qq].v + b[i].v > ma) {
        ma = a[qq].v + b[i].v;
        g1 = qq;
        g2 = i;
      }
    }
  }
  if (ma < 0) {
    cout << 0 << endl;
    return 0;
  }
  cout << ma << endl;
  for (long long i = 1; i <= g1; i++) cout << a[i].c << endl;
  for (long long i = 1; i <= g2; i++) cout << b[i].c << endl;
  return 0;
}
