#include <bits/stdc++.h>
using namespace std;
int t[102400];
int p[102400];
int ans[102400];
int ind[102400];
struct cmp {
  bool operator()(int i, int j) { return p[i] / t[i] > p[j] / t[j]; }
};
int main() {
  int n, v;
  scanf("%d %d", &n, &v);
  for (int i = 0; i < n; ++i) {
    scanf("%d %d", &t[i], &p[i]);
    p[i] *= 2;
    ind[i] = i;
  }
  sort(ind, ind + n, cmp());
  int cnt = 0;
  int sumt = 0;
  int sump = 0;
  for (int i = 0; i < n; ++i) {
    if (sumt + t[ind[i]] <= v) {
      ans[cnt++] = ind[i];
      sumt += t[ind[i]];
      sump += p[ind[i]];
      if (sumt == v) {
        break;
      }
    } else {
      int p1 = -1;
      int p2 = -1;
      for (int j = i + 1; j < n; ++j) {
        if (t[ind[j]] == 1) {
          p1 = sump + p[ind[j]];
          break;
        }
      }
      for (int j = cnt - 1; j >= 0; --j) {
        if (t[ans[j]] == 1) {
          p2 = sump - p[ans[j]] + p[ind[i]];
          break;
        }
      }
      if (p1 >= p2 && p1 != -1) {
        for (int j = i + 1; j < n; ++j) {
          if (t[ind[j]] == 1) {
            sump += p[ind[j]];
            ans[cnt++] = ind[j];
            break;
          }
        }
      } else if (p2 > p1 && p2 != -1) {
        for (int j = cnt - 1; j >= 0; --j) {
          if (t[ans[j]] == 1) {
            sump += p[ind[i]] - p[ans[j]];
            ans[j] = ind[i];
            break;
          }
        }
      }
      break;
    }
  }
  printf("%d\n", sump / 2);
  for (int i = 0; i < cnt; ++i) {
    printf("%d\n", ans[i] + 1);
  }
  return 0;
}
