#include <bits/stdc++.h>
using namespace std;
const long long sz = 100000;
int main() {
  {
    long long n, v;
    cin >> n >> v;
    vector<pair<long long, long long> > k(sz, {0, 0}), c(sz, {0, 0});
    for (long long i = 0; i < n; ++i) {
      long long t;
      long long p;
      cin >> t >> p;
      if (t == 1) {
        k[i].first = p;
        k[i].second = i + 1;
      } else {
        c[i].first = p;
        c[i].second = i + 1;
      }
    }
    vector<pair<long long, long long> > res;
    res.clear();
    sort(k.rbegin(), k.rend());
    sort(c.rbegin(), c.rend());
    long long odd = 0;
    if (v % 2 == 1) {
      res.push_back(make_pair(k[0].first, k[0].second));
      odd = 1;
      --v;
    }
    long long sum = 0;
    long long kk = 0, cc = 0;
    long long max_c = 0;
    if (odd == 1) {
      max_c += k[0].first;
      sum = 1;
      kk = 1;
      cc = 0;
      while (sum <= v && kk <= sz && cc <= sz) {
        if (sum == v) break;
        long long take1 = k[kk].first + k[kk + 1].first;
        long long take2 = c[cc].first;
        if (take1 >= take2) {
          res.push_back(make_pair(k[kk].first, k[kk].second));
          res.push_back(make_pair(k[kk + 1].first, k[kk + 1].second));
          kk = kk + 2;
          sum += 2;
          max_c += take1;
        } else if (take2 > take1) {
          res.push_back(make_pair(c[cc].first, c[cc].second));
          cc = cc + 1;
          sum += 2;
          max_c += take2;
        }
      }
    } else if (odd == 0) {
      kk = 0;
      cc = 0;
      while (sum <= v && kk <= sz && cc <= sz) {
        if (sum == v) break;
        long long take1 = k[kk].first + k[kk + 1].first;
        long long take2 = c[cc].first;
        if (take1 >= take2) {
          res.push_back(make_pair(k[kk].first, k[kk].second));
          res.push_back(make_pair(k[kk + 1].first, k[kk + 1].second));
          kk = kk + 2;
          sum += 2;
          max_c += take1;
        } else if (take2 > take1) {
          res.push_back(make_pair(c[cc].first, c[cc].second));
          cc = cc + 1;
          sum += 2;
          max_c += take2;
        }
      }
    }
    cout << max_c << endl;
    for (long long i = 0; i < res.size(); ++i) {
      if (res[i].first == 0)
        break;
      else {
        cout << res[i].second << " ";
      }
    }
    cout << endl;
  }
}
