#include <bits/stdc++.h>
using namespace std;
class node {
 public:
  int idx;
  int lv;
  int value;
};
node t1[100010];
node t2[100010];
int li[100010];
int m, n;
bool cmp(node a, node b) { return a.value > b.value; }
void hexie() {
  int i, j, k, num1, num2, lv, value, rear;
  int res = 0;
  rear = num1 = num2 = 0;
  for (i = 1; i < n + 1; i++) {
    scanf("%d%d", &lv, &value);
    if (lv == 1) {
      t1[num1].lv = lv;
      t1[num1].value = value;
      t1[num1].idx = i;
      ++num1;
    } else {
      t2[num2].lv = lv;
      t2[num2].value = value;
      t2[num2].idx = i;
      ++num2;
    }
  }
  sort(t1, t1 + num1, cmp);
  sort(t2, t2 + num2, cmp);
  i = j = 0;
  while (m > 0) {
    if (i < num1 && j < num2) {
      if (t1[i].value > t2[j].value || m == 1) {
        --m;
        res += t1[i].value;
        li[rear++] = t1[i].idx;
        ++i;
      } else if (i + 1 < num1 &&
                 (t1[i].value + t1[i + 1].value > t2[j].value)) {
        --m;
        res += t1[i].value;
        li[rear++] = t1[i].idx;
        ++i;
      } else if (m >= 2) {
        m -= 2;
        res += t2[j].value;
        li[rear++] = t2[j].idx;
        ++j;
      }
    } else if (i < num1) {
      --m;
      res += t1[i].value;
      li[rear++] = t1[i].idx;
      ++i;
    } else if (m >= 2 && j < num2) {
      m -= 2;
      res += t2[j].value;
      li[rear++] = t2[j].idx;
      ++j;
    } else {
      break;
    }
  }
  printf("%d\n", res);
  for (i = 0; i < rear; i++) printf(i == rear - 1 ? "%d\n" : "%d ", li[i]);
}
int main() {
  while (scanf("%d%d", &n, &m) != EOF) {
    hexie();
  }
  return 0;
}
