#include <bits/stdc++.h>
using namespace std;
template <class T>
inline string itos(T n) {
  return (n) < 0    ? "-" + itos(-(n))
         : (n) < 10 ? (string)("") + (char)('0' + (n))
                    : itos((n) / 10) + itos((n) % 10);
}
int A, B, ansA, ansB, anssum;
pair<int, int> one[100010], two[100010];
int ansid[100010];
void func(int V) {
  int a = A, b = 0, i, sum = 0;
  for ((i) = 0; (i) < (int)(A); (i)++) sum += one[i].first;
  while (1) {
    while (b < B && a + 2 * b + 2 <= V) {
      sum += two[b].first;
      b++;
    }
    if (a + 2 * b <= V && sum > anssum) {
      ansA = a;
      ansB = b;
      anssum = sum;
    }
    if (a == 0) return;
    a--;
    sum -= one[a].first;
  }
}
int main(void) {
  int i, N, V;
  scanf("%d%d", &N, &V);
  for ((i) = 0; (i) < (int)(N); (i)++) {
    int type, cap;
    scanf("%d%d", &type, &cap);
    if (type == 1) {
      one[A] = make_pair(cap, i + 1);
      A++;
    } else {
      two[B] = make_pair(cap, i + 1);
      B++;
    }
  }
  sort(one, one + A);
  reverse(one, one + A);
  sort(two, two + B);
  reverse(two, two + B);
  func(V);
  for ((i) = 0; (i) < (int)(ansA); (i)++) ansid[i] = one[i].second;
  for ((i) = 0; (i) < (int)(ansB); (i)++) ansid[ansA + i] = two[i].second;
  sort(ansid, ansid + ansA + ansB);
  printf("%d\n", anssum);
  for ((i) = 0; (i) < (int)(ansA + ansB); (i)++) {
    printf("%d", ansid[i]);
    if (i == ansA + ansB - 1)
      printf("\n");
    else
      printf(" ");
  }
  return 0;
}
