#include <bits/stdc++.h>
using namespace std;
struct node {
  int num, id;
  bool operator<(const node &rhs) const { return num > rhs.num; }
};
int n, v, p1, p2, acnt, bcnt;
node a[100015], b[100015];
long long ans, asum[100015], bsum[100015];
int pow(int x, int y) { return y ? x * pow(x, y - 1) : 1; }
int main(void) {
  scanf("%d %d", &n, &v);
  for (int i = 0; i < n; i++) {
    int t, p;
    scanf("%d %d", &t, &p);
    if (t == 1) {
      a[++acnt].num = p;
      a[acnt].id = i + 1;
    } else {
      b[++bcnt].num = p;
      b[bcnt].id = i + 1;
    }
  }
  sort(a + 1, a + acnt + 1);
  sort(b + 1, b + bcnt + 1);
  for (int i = 1; i <= acnt; i++) {
    asum[i] = asum[i - 1] + 1LL * a[i].num;
  }
  for (int i = 1; i <= bcnt; i++) {
    bsum[i] = bsum[i - 1] + 1LL * b[i].num;
  }
  for (int i = 0; i <= min(acnt, v); i++) {
    if (asum[i] + bsum[min(bcnt, (v - i) >> 1)] > ans) {
      ans = asum[i] + bsum[min(bcnt, (v - i) >> 1)];
      p1 = i;
      p2 = min((v - i) >> 1, bcnt);
    }
  }
  printf("%lld\n", ans);
  for (int i = p1; i > 0; i--) {
    printf("%d ", a[i].id);
  }
  for (int i = p2; i > 0; i--) {
    printf("%d ", b[i].id);
  }
  printf("\n");
  return 0;
}
