#include <bits/stdc++.h>
using namespace std;
struct node {
  int p, idx;
} A1[200100], A2[200100];
int t1, t2, s1[200100], s2[200100];
int n, v, ans[200100], top;
bool cmp(node A, node B) { return A.p > B.p; }
int main() {
  scanf("%d%d", &n, &v);
  t1 = t2 = 0;
  for (int i = 1; i <= n; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    if (a == 1) {
      A1[++t1].p = b;
      A1[t1].idx = i;
    }
    if (a == 2) {
      A2[++t2].p = b;
      A2[t2].idx = i;
    }
  }
  sort(A1 + 1, A1 + t1 + 1, cmp);
  sort(A2 + 1, A2 + t2 + 1, cmp);
  s1[0] = 0;
  for (int i = 1; i <= t1; ++i) s1[i] = s1[i - 1] + A1[i].p;
  s2[0] = 0;
  for (int i = 1; i <= t2; ++i) s2[i] = s2[i - 1] + A2[i].p;
  int sum = 0, idx = -1, a = 0, b = 0;
  for (int i = 1; i <= t2 + 1 && 2 * (i - 1) <= v; ++i) {
    int k2 = 0, k1 = 0, idx = v - 2 * (i - 1);
    if (idx > t1) idx = t1;
    k2 = s2[i - 1];
    k1 = s1[idx];
    if (k1 + k2 > sum) {
      sum = k1 + k2;
      a = i - 1;
      b = idx;
    }
  }
  top = 0;
  for (int i = 1; i <= a; ++i) ans[top++] = A2[i].idx;
  for (int i = 1; i <= b; ++i) ans[top++] = A1[i].idx;
  sort(ans, ans + top);
  printf("%d\n", sum);
  for (int i = 0; i < top; ++i) {
    printf("%d", ans[i]);
    if (i < top - 1) printf(" ");
  }
  return 0;
}
