#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e5 + 1;
struct p {
  int x, id;
  bool operator<(const p &a) const { return x < a.x; }
} a[MAX], b[MAX];
int n, v, num1, num2, num, Num;
long long ans;
int id[MAX], ID[MAX];
int main() {
  scanf("%d%d", &n, &v);
  for (int i = 1, t, x; i <= n; ++i) {
    scanf("%d%d", &t, &x);
    if (t == 1)
      a[++num1] = (p){x, i};
    else
      b[++num2] = (p){x, i};
  }
  sort(a + 1, a + 1 + num1), sort(b + 1, b + 1 + num2);
  int L, R = num2;
  for (L = num1; L >= 1 && v; --L, --v) ans += a[L].x, id[++num] = a[L].id;
  ++L;
  if (v) {
    for (; R >= 1 && v > 1; --R, v -= 2) ans += b[R].x, ID[++Num] = b[R].id;
  }
  if (v) a[--L] = (p){0}, ++num;
  for (; L < num1 && R; L += 2, --R)
    if (b[R].x > a[L].x + a[L + 1].x)
      ans += b[R].x - a[L].x - a[L + 1].x, num -= 2, ID[++Num] = b[R].id;
    else
      break;
  printf("%I64d\n", ans);
  for (int i = 1; i <= num; ++i)
    if (id[i]) printf("%d ", id[i]);
  for (int i = 1; i <= Num; ++i) printf("%d ", ID[i]);
  return 0;
}
