#include <bits/stdc++.h>
struct Lodka {
  int number;
  int pi;
};
int lodka_cmp_func(const void *a, const void *b) {
  int x = ((struct Lodka *)a)->pi;
  int y = ((struct Lodka *)b)->pi;
  if (x == y) {
    return 0;
  } else if (x > y) {
    return -1;
  } else {
    return 1;
  }
}
int main(void) {
  struct Lodka baydarka[100000];
  struct Lodka katamaran[100000];
  int numKatamaran = 0;
  int numBaydarka = 0;
  int beremKatamaran = -1;
  int beremBaydarka = -1;
  int temp;
  int n;
  int v;
  scanf("%d", &n);
  scanf("%d", &v);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &temp);
    if (temp == 1) {
      scanf("%d", &baydarka[numBaydarka].pi);
      baydarka[numBaydarka].number = i + 1;
      numBaydarka++;
    } else {
      scanf("%d", &katamaran[numKatamaran].pi);
      katamaran[numKatamaran].number = i + 1;
      numKatamaran++;
    }
  }
  qsort(baydarka, numBaydarka, sizeof(struct Lodka), lodka_cmp_func);
  qsort(katamaran, numKatamaran, sizeof(struct Lodka), lodka_cmp_func);
  while (v != 0) {
    if (v != 1) {
      if ((numKatamaran > beremKatamaran + 1) &&
          (numBaydarka > beremBaydarka + 2)) {
        if (katamaran[beremKatamaran + 1].pi >
            baydarka[beremBaydarka + 1].pi + baydarka[beremBaydarka + 2].pi) {
          beremKatamaran++;
          v -= 2;
        } else {
          beremBaydarka += 2;
          v -= 2;
        }
      } else if (numBaydarka > beremBaydarka + 2) {
        beremBaydarka += 2;
        v -= 2;
      } else if ((numKatamaran > beremKatamaran + 1) &&
                 (numBaydarka > beremBaydarka + 1)) {
        if (katamaran[beremKatamaran + 1].pi > baydarka[beremBaydarka + 1].pi) {
          beremKatamaran++;
          v -= 2;
        } else {
          beremBaydarka += 1;
          v -= 1;
        }
      } else if (numBaydarka > beremBaydarka + 1) {
        beremBaydarka += 1;
        v -= 1;
      } else if (numKatamaran > beremKatamaran + 1) {
        beremKatamaran++;
        v -= 2;
      } else {
        break;
      }
    } else {
      if (beremBaydarka > -1) {
        if (numBaydarka > beremBaydarka + 1) {
          if (numKatamaran > beremKatamaran + 1) {
            if (katamaran[beremKatamaran + 1].pi >
                baydarka[beremBaydarka + 1].pi + baydarka[beremBaydarka].pi) {
              beremKatamaran++;
              beremBaydarka--;
              v--;
            } else {
              beremBaydarka++;
              v--;
            }
          } else {
            beremBaydarka++;
            v--;
          }
        } else if (katamaran[beremKatamaran + 1].pi >
                   baydarka[beremBaydarka + 1].pi) {
          beremKatamaran++;
          beremBaydarka--;
          v--;
        }
      } else if (numBaydarka > 0) {
        beremBaydarka++;
        v--;
      } else {
        break;
      }
    }
  }
  int maxVes = 0;
  for (int i = 0; i < beremBaydarka + 1; i++) maxVes += baydarka[i].pi;
  for (int i = 0; i < beremKatamaran + 1; i++) maxVes += katamaran[i].pi;
  printf("%d\n", maxVes);
  for (int i = 0; i < beremBaydarka + 1; i++) {
    if ((i == beremBaydarka) && (beremKatamaran == -1)) {
      printf("%d", baydarka[i].number);
    } else {
      printf("%d ", baydarka[i].number);
    }
  }
  for (int i = 0; i < beremKatamaran + 1; i++) {
    if (i == beremKatamaran) {
      printf("%d", katamaran[i].number);
    } else {
      printf("%d ", katamaran[i].number);
    }
  }
  return 0;
}
