#include <bits/stdc++.h>
using namespace std;
struct t {
  int a, c, v;
  double p;
};
int n, v, ans = 0, res[100005];
t data[100005];
bool cmp(const t x, const t y) { return x.p > y.p; }
int main() {
  cin >> n >> v;
  for (int i = 0; i < n; i++) {
    data[i].a = i + 1;
    cin >> data[i].c >> data[i].v;
    data[i].p = (double)data[i].v / data[i].c;
  }
  sort(data, data + n, cmp);
  int x = 0;
  while ((x < n) && (v - data[x].c >= 0)) {
    v -= data[x].c;
    ans += data[x].v;
    res[x] = data[x].a;
    x++;
  }
  if (v == 0) {
    cout << ans << endl;
    if (ans != 0) {
      for (int i = 0; i < x - 1; i++) {
        cout << res[i] << " ";
      }
      cout << res[x - 1] << endl;
    }
  } else {
    int p1 = -1;
    for (int i = x; i < n; i++) {
      if (data[i].c == 1) {
        ans += data[i].v;
        res[x++] = data[i].a;
        p1 = i;
        break;
      }
    }
    int p2;
    if (p1 == -1) {
      p2 = x - 1;
    } else {
      p2 = x - 2;
    }
    for (int i = p2; i >= 0; i--) {
      if (data[i].c == 1) {
        if (p1 == -1) {
          if (ans - data[i].v + data[x].v > ans) {
            ans = ans - data[i].v + data[x].v;
            res[i] = data[x].a;
          }
        } else {
          if (ans - data[i].v - data[p1].v + data[x - 1].v > ans) {
            ans = ans - data[i].v - data[p1].v + data[x - 1].v;
            res[i] = data[--x].a;
          }
        }
        break;
      }
    }
    cout << ans << endl;
    if (ans != 0) {
      for (int i = 0; i < x - 1; i++) {
        cout << res[i] << " ";
      }
      cout << res[x - 1] << endl;
    }
  }
  return 0;
}
