#include <bits/stdc++.h>
using namespace std;
struct boat {
  float capacity;
  int type;
  int number;
  int chosen = 0;
};
int part(struct boat* arr, int low, int high) {
  float pivot = arr[high].capacity / arr[high].type;
  int i = low - 1;
  for (int j = low; j < high; j++) {
    if (arr[j].capacity / arr[j].type > pivot) {
      i++;
      struct boat temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
    }
  }
  struct boat temp = arr[i + 1];
  arr[i + 1] = arr[high];
  arr[high] = temp;
  return (i + 1);
}
void quickSort(struct boat* arr, int low, int high) {
  if (low < high) {
    int pi = part(arr, low, high);
    quickSort(arr, low, pi - 1);
    quickSort(arr, pi + 1, high);
  }
}
int main() {
  int n, v;
  cin >> n >> v;
  struct boat* boats = new struct boat[n];
  for (int i = 0; i < n; i++) {
    struct boat x;
    cin >> x.type;
    cin >> x.capacity;
    x.number = i + 1;
    boats[i] = x;
  }
  quickSort(boats, 0, n - 1);
  struct boat* chosenBoats = new struct boat[n];
  int chosenBoatsCount = 0;
  int carry = 0;
  struct boat minType1Boat;
  int minType1BoatIndex = -1;
  for (int i = 0; i < n; i++) {
    if (v >= boats[i].type) {
      chosenBoats[chosenBoatsCount] = boats[i];
      chosenBoatsCount++;
      carry += boats[i].capacity;
      v -= boats[i].type;
      boats[i].chosen = 1;
      if (boats[i].type == 1) {
        minType1Boat = boats[i];
        minType1BoatIndex = chosenBoatsCount - 1;
      }
    }
  }
  if (v == 1 && minType1BoatIndex != -1) {
    for (int i = 0; i < n; i++) {
      if (0 == boats[i].chosen && 2 == boats[i].type &&
          boats[i].capacity > minType1Boat.capacity) {
        carry -= minType1Boat.capacity;
        carry += boats[i].capacity;
        chosenBoats[minType1BoatIndex] = boats[i];
        break;
      }
    }
  }
  cout << carry << endl;
  for (int i = 0; i < chosenBoatsCount; i++) {
    cout << chosenBoats[i].number << " ";
  }
  return 0;
}
