#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkMin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkMax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline T Min(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T Max(T a, T b) {
  return a > b ? a : b;
}
template <class T>
inline T Myabs(T a) {
  return a > 0 ? a : -a;
}
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
const int inf = 0x3f3f3f3f;
const long long linf = 1LL << 60;
const double pi = acos(-1.0);
const double eps = 1e-9;
const int mod = 100000007;
const int maxn = 100100;
int n, v, t, p, result, cnt1, cnt2;
int sum1[maxn], sum2[maxn], maxid;
pair<int, int> adj1[maxn], adj2[maxn];
bool cmp(pair<int, int> x, pair<int, int> y) { return x.first > y.first; }
int main() {
  result = 0, cnt1 = 0, cnt2 = 0;
  scanf("%d %d", &n, &v);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &t, &p);
    if (t == 1)
      adj1[cnt1++] = make_pair(p, i + 1);
    else
      adj2[cnt2++] = make_pair(p, i + 1);
  }
  sort(adj1, adj1 + cnt1, cmp);
  sort(adj2, adj2 + cnt2, cmp);
  for (int i = 0; i < cnt1; i++) sum1[i + 1] = sum1[i] + adj1[i].first;
  for (int i = 0; i < cnt2; i++) sum2[i + 1] = sum2[i] + adj2[i].first;
  for (int i = 0; i <= cnt2; i++) {
    if (i * 2 <= v) {
      if (sum1[min(v - i * 2, cnt1)] + sum2[i] > result)
        result = sum1[min(v - i * 2, cnt1)] + sum2[i], maxid = i;
    }
  }
  printf("%d\n", result);
  for (int i = 0; i < maxid; i++) printf("%d ", adj2[i].second);
  for (int i = 0; i < min(v - maxid * 2, cnt1); i++)
    printf("%d ", adj1[i].second);
  return 0;
}
