#include <bits/stdc++.h>
struct {
  int operator()(std::pair<int, int>& a, std::pair<int, int>& b) {
    return a.first > b.first;
  }
} compare;
int main() {
  std::deque<std::pair<int, int>> kayaks;
  std::deque<std::pair<int, int>> catamarans;
  std::vector<int> retNumbers;
  int n = 0, v = 0;
  std::cin >> n >> v;
  for (int i = 0; i < n; ++i) {
    int type = 0, cap = 0;
    std::cin >> type >> cap;
    if (type == 1)
      kayaks.push_back(std::make_pair(cap, i + 1));
    else
      catamarans.push_back(std::make_pair(cap, i + 1));
  }
  std::sort(kayaks.begin(), kayaks.end(), compare);
  std::sort(catamarans.begin(), catamarans.end(), compare);
  std::vector<int> spaceKayaks, spaceCat;
  spaceCat.push_back(0);
  spaceKayaks.push_back(0);
  for (int i = 0; i < kayaks.size(); i++)
    spaceKayaks.push_back(spaceKayaks[i] + kayaks[i].first);
  for (int i = 0; i < catamarans.size(); i++)
    spaceCat.push_back(spaceCat[i] + catamarans[i].first);
  int p1, p2, rs = 0, rsi, kayaksi = 0, cati = 0;
  for (int i = 0; i <= kayaks.size() && i <= v; i++) {
    p1 = i;
    p2 = std::min((v - p1) / 2, (int)catamarans.size());
    rsi = spaceKayaks[p1] + spaceCat[p2];
    if (rsi > rs) {
      rs = rsi;
      kayaksi = p1;
      cati = p2;
    }
  }
  std::cout << rs << "\n";
  for (int i = 0; i < kayaksi; ++i) std::cout << kayaks[i].second << " ";
  for (int i = 0; i < cati; ++i) std::cout << catamarans[i].second << " ";
  return 0;
}
