#include <bits/stdc++.h>
using namespace std;
struct vihecle {
  int id;
  int cpa;
} p1[111111], p2[111111];
int presum1[111111], presum2[111111];
bool cmp(vihecle a, vihecle b) { return a.cpa > b.cpa; }
int main() {
  int n, v;
  cin >> n >> v;
  int i1 = 0, i2 = 0;
  presum1[0] = presum2[0] = 0;
  for (int i = 0; i < n; ++i) {
    int t, pp;
    cin >> t >> pp;
    if (t == 1) {
      p1[i1].cpa = pp;
      p1[i1++].id = i + 1;
    } else {
      p2[i2].cpa = pp;
      p2[i2++].id = i + 1;
    }
  }
  sort(p1, p1 + i1, cmp);
  sort(p2, p2 + i2, cmp);
  for (int i = 1; i <= i1; ++i) presum1[i] = presum1[i - 1] + p1[i - 1].cpa;
  for (int i = 1; i <= i2; ++i) presum2[i] = presum2[i - 1] + p2[i - 1].cpa;
  int ans = 0, ii1 = 0, ii2 = 0;
  for (int i = 0; i <= i1; ++i) {
    if (i > v) break;
    int tmp = presum1[i] + presum2[min((v - i) / 2, i2)];
    if (tmp > ans) {
      ans = tmp;
      ii1 = i;
      ii2 = min((v - i) / 2, i2);
    }
  }
  cout << ans << endl;
  for (int i = 0; i < ii1; ++i) cout << p1[i].id << " ";
  for (int i = 0; i < ii2; ++i) cout << p2[i].id << " ";
  return 0;
}
