#include <bits/stdc++.h>
using namespace std;
long long a[100005], b[100005];
struct boat {
  int cap;
  int num;
  boat() { cap = num = 0; }
  boat(int c, int n) {
    cap = c;
    num = n;
  }
  bool operator<(boat b) const { return cap > b.cap; }
};
vector<boat> v[2];
int main() {
  int n, V;
  cin >> n >> V;
  int t, c;
  for (int i = 0; i < n; i++) {
    cin >> t >> c;
    if (t == 1)
      v[0].push_back(boat(c, i + 1));
    else
      v[1].push_back(boat(c, i + 1));
    a[i] = b[i] = 0;
  }
  sort(v[0].begin(), v[0].end());
  sort(v[1].begin(), v[1].end());
  for (int i = 0; i < v[0].size(); i++)
    if (i == 0)
      a[0] = v[0][i].cap;
    else
      a[i] = a[i - 1] + v[0][i].cap;
  for (int i = 0; i < v[1].size(); i++)
    if (i == 0)
      b[0] = v[1][i].cap;
    else
      b[i] = b[i - 1] + v[1][i].cap;
  long long ans = -1;
  int ians = 0;
  int ians2 = 0;
  for (int i = 0; i <= v[0].size() && i <= V; i++) {
    long long now = 0;
    if ((V - i) / 2 - 1 >= 0 && (V - i) / 2 - 1 < v[1].size())
      now = b[(V - i) / 2 - 1];
    else if ((V - i) / 2 - 1 >= int(v[1].size()) && (v[1].size() > 0))
      now = b[v[1].size() - 1];
    if (i > 0) now += a[i - 1];
    if (now > ans) {
      ans = now;
      ians2 = min(int(v[1].size()), (V - i) / 2);
      ians = i;
    }
  }
  cout << ans << endl;
  for (int i = 0; i < ians; i++) cout << v[0][i].num << ' ';
  for (int i = 0; i < ians2; i++) cout << v[1][i].num << ' ';
  cout << endl;
  return 0;
}
