#include <bits/stdc++.h>
using namespace std;
priority_queue<pair<int, int> > q[3];
priority_queue<pair<int, int>, vector<pair<int, int> >,
               greater<pair<int, int> > >
    anses[3];
int main() {
  int n, v, ans = 0;
  cin >> n >> v;
  pair<int, int> t;
  for (int t, p, i = 0; i < n; i++) {
    cin >> t >> p;
    q[t].push(make_pair(p, i + 1));
  }
  while (!q[1].empty() && !q[2].empty() && v) {
    if (v == 1) {
      ans += q[1].top().first;
      anses[1].push(q[1].top());
      q[1].pop();
      v--;
    } else {
      if (q[1].top().first >= q[2].top().first) {
        ans += q[1].top().first;
        anses[1].push(q[1].top());
        q[1].pop();
        v--;
      } else {
        t = q[1].top();
        q[1].pop();
        if (!q[1].empty()) {
          if (q[1].top().first + t.first < q[2].top().first) {
            ans += q[2].top().first;
            anses[2].push(q[2].top());
            q[2].pop();
            v -= 2;
            q[1].push(t);
          } else {
            ans += q[1].top().first + t.first;
            anses[1].push(t);
            anses[1].push(q[1].top());
            q[1].pop();
            v -= 2;
          }
        } else {
          ans += q[2].top().first;
          anses[2].push(q[2].top());
          q[2].pop();
          v -= 2;
          q[1].push(t);
        }
      }
    }
  }
  while (!q[1].empty() && v >= 1) {
    ans += q[1].top().first;
    anses[1].push(q[1].top());
    q[1].pop();
    v--;
  }
  while (!q[2].empty() && v >= 2) {
    ans += q[2].top().first;
    anses[2].push(q[2].top());
    q[2].pop();
    v -= 2;
  }
  while (q[2].size() >= 1 && anses[1].size() >= 2) {
    t = anses[1].top();
    anses[1].pop();
    if (anses[1].top().first + t.first < q[2].top().first) {
      ans = ans - (anses[1].top().first + t.first) + q[2].top().first;
      anses[1].pop();
      anses[2].push(q[2].top());
      q[2].pop();
    } else {
      anses[1].push(t);
      break;
    }
  }
  cout << ans << endl;
  while (!anses[1].empty()) {
    cout << anses[1].top().second << " ";
    anses[1].pop();
  }
  while (!anses[2].empty()) {
    cout << anses[2].top().second << " ";
    anses[2].pop();
  }
  return 0;
}
