#include <bits/stdc++.h>
using namespace std;
struct unit {
  int arr[5];
  int t, p, k;
};
int n, v;
unit kat[100003];
unit bay[100003];
int kat_n, bay_n;
int i_kat, i_bay;
int ans[100003];
int n_ans = 0;
int sum = 0;
void take_bay() {
  ans[n_ans] = bay[i_bay].k;
  ++n_ans;
  v -= 1;
  sum += bay[i_bay].p;
  ++i_bay;
}
void take_kat() {
  ans[n_ans] = kat[i_kat].k;
  ++n_ans;
  v -= 2;
  sum += kat[i_kat].p;
  ++i_kat;
}
bool _less(const unit& a, const unit& b) { return a.p > b.p; }
int main() {
  scanf("%d%d", &n, &v);
  for (int i = 0; i < n; ++i) {
    int t, p;
    scanf("%d%d", &t, &p);
    if (t == 1) {
      bay[bay_n].t = t;
      bay[bay_n].p = p;
      bay[bay_n].k = i;
      ++bay_n;
    } else {
      kat[kat_n].t = t;
      kat[kat_n].p = p;
      kat[kat_n].k = i;
      ++kat_n;
    }
  }
  sort(bay, bay + bay_n, _less);
  sort(kat, kat + kat_n, _less);
  i_kat = 0;
  i_bay = 0;
  while (v) {
    if (v == 1) {
      if (i_bay != bay_n) {
        take_bay();
      } else {
        v -= 1;
      }
    } else {
      if (i_bay <= bay_n - 2 && i_kat <= kat_n - 1) {
        if (kat[i_kat].p > bay[i_bay].p + bay[i_bay + 1].p) {
          take_kat();
        } else {
          take_bay();
        }
      } else if (i_bay == bay_n - 1 && i_kat <= kat_n - 1) {
        if (kat[i_kat].p > bay[i_bay].p) {
          take_kat();
        } else {
          take_bay();
        }
      } else if (i_bay == bay_n && i_kat != kat_n) {
        take_kat();
      } else if (i_bay != bay_n && i_kat == kat_n) {
        take_bay();
      } else if (i_bay == bay_n && i_kat == kat_n) {
        break;
      }
    }
  }
  printf("%d\n", sum);
  for (int i = 0; i < n_ans; ++i) {
    printf("%d ", ans[i] + 1);
  }
}
