#include <bits/stdc++.h>
using namespace std;
const int maxn = 2 * 1e5;
struct node {
  int k, v, id;
  bool operator<(const node &a) const {
    if (k == a.k) return v < a.v;
    return k > a.k;
  }
} ab[maxn];
int cmp(node &a, node &b) { return a.v < b.v; }
priority_queue<node> q;
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  int sum = 0;
  for (int i = 0; i < n; i++) {
    int c, d;
    scanf("%d %d", &c, &d);
    ab[i].k = c;
    ab[i].v = d;
    ab[i].id = i + 1;
  }
  sort(ab, ab + n, cmp);
  int ans = 0;
  int flag = 0;
  for (int i = 0; i < n; i++) {
    if (sum + ab[i].v <= m) {
      q.push(ab[i]);
      sum += ab[i].v;
      ans++;
      while (q.top().k < ans && !q.empty()) {
        ans--;
        sum -= q.top().v;
        q.pop();
      }
    } else {
      printf("%d\n%d\n", ans, ans);
      while (!q.empty()) {
        printf("%d ", q.top().id);
        q.pop();
      }
      flag = 1;
      break;
    }
  }
  if (!flag) {
    printf("%d\n%d\n", ans, ans);
    while (!q.empty()) {
      printf("%d ", q.top().id);
      q.pop();
    }
  }
}
