#include <bits/stdc++.h>
using namespace std;
class boat {
 public:
  unsigned long long index;
  unsigned long long capacity;
};
int cmp(const void *a, const void *b) {
  boat boat_a = *(const boat *)a;
  boat boat_b = *(const boat *)b;
  if (boat_a.capacity > boat_b.capacity)
    return 1;
  else
    return -1;
}
int main() {
  unsigned long long number_of_boat = 0;
  unsigned long long total_volumn = 0;
  cin >> number_of_boat >> total_volumn;
  boat size_one_list[number_of_boat];
  boat size_two_list[number_of_boat];
  unsigned long long size_one_counter = 0;
  unsigned long long size_two_counter = 0;
  for (int i = 0; i < number_of_boat; ++i) {
    unsigned long long temp_size, temp_capacity;
    cin >> temp_size >> temp_capacity;
    if (temp_size == 1) {
      size_one_list[size_one_counter].capacity = temp_capacity;
      size_one_list[size_one_counter++].index = i + 1;
    } else if (temp_size == 2) {
      size_two_list[size_two_counter].capacity = temp_capacity;
      size_two_list[size_two_counter++].index = i + 1;
    }
  }
  qsort(size_one_list, size_one_counter, sizeof(boat), cmp);
  qsort(size_two_list, size_two_counter, sizeof(boat), cmp);
  unsigned long long total_capacity = 0;
  unsigned long long print_index[number_of_boat];
  unsigned long long print_counter = 0;
  auto remain_volumn = total_volumn;
  if (remain_volumn % 2 != 0 && size_one_counter >= 1) {
    print_index[print_counter++] = size_one_list[size_one_counter - 1].index;
    total_capacity += size_one_list[size_one_counter - 1].capacity;
    remain_volumn -= 1;
    size_one_counter--;
  }
  while (remain_volumn > 1) {
    if (size_two_counter > 0 && size_one_counter >= 2) {
      if (size_two_list[size_two_counter - 1].capacity >=
          (size_one_list[size_one_counter - 1].capacity +
           size_one_list[size_one_counter - 2].capacity)) {
        print_index[print_counter++] =
            size_two_list[size_two_counter - 1].index;
        total_capacity += size_two_list[size_two_counter - 1].capacity;
        remain_volumn -= 2;
        size_two_counter--;
      } else {
        print_index[print_counter++] =
            size_one_list[size_one_counter - 1].index;
        print_index[print_counter++] =
            size_one_list[size_one_counter - 2].index;
        total_capacity += size_one_list[size_one_counter - 1].capacity;
        total_capacity += size_one_list[size_one_counter - 2].capacity;
        remain_volumn -= 2;
        size_one_counter -= 2;
      }
    } else if (size_two_counter > 0 && size_one_counter >= 1) {
      if (size_two_list[size_two_counter - 1].capacity >=
          size_one_list[size_one_counter - 1].capacity) {
        print_index[print_counter++] =
            size_two_list[size_two_counter - 1].index;
        total_capacity += size_two_list[size_two_counter - 1].capacity;
        remain_volumn -= 2;
        size_two_counter--;
      } else {
        print_index[print_counter++] =
            size_one_list[size_one_counter - 1].index;
        total_capacity += size_one_list[size_one_counter - 1].capacity;
        remain_volumn -= 1;
        size_one_counter -= 1;
      }
    } else if (size_two_counter > 0) {
      print_index[print_counter++] = size_two_list[size_two_counter - 1].index;
      total_capacity += size_two_list[size_two_counter - 1].capacity;
      remain_volumn -= 2;
      size_two_counter--;
    } else if (size_one_counter > 0) {
      print_index[print_counter++] = size_one_list[size_one_counter - 1].index;
      total_capacity += size_one_list[size_one_counter - 1].capacity;
      remain_volumn -= 1;
      size_one_counter -= 1;
    } else {
      break;
    }
  }
  if (remain_volumn % 2 != 0 && size_one_counter >= 1) {
    print_index[print_counter++] = size_one_list[size_one_counter - 1].index;
    total_capacity += size_one_list[size_one_counter - 1].capacity;
    remain_volumn -= 1;
    size_one_counter--;
  }
  cout << total_capacity << endl;
  for (int i = 0; i < print_counter; i++) {
    cout << print_index[i] << " ";
  }
  return 0;
}
