#include <bits/stdc++.h>
using namespace std;
int const size = 1000 + 5;
pair<int, int> tab[size], pan[size];
int main() {
  int n, i, j, k, m, hor = 0, c, t, kt, kp;
  long long sum = 0;
  scanf("%d %d", &n, &k);
  kt = kp = 0;
  for (i = 0; i < n; i++) {
    scanf("%d %d", &c, &t);
    if (t == 1) {
      tab[kt].first = 2 * c;
      tab[kt++].second = i + 1;
    } else {
      pan[kp].first = 2 * c;
      pan[kp++].second = i + 1;
    }
  }
  sort(tab, tab + kt);
  sort(pan, pan + kp);
  if (kt < k) {
    for (i = 0; i < kt; i++) sum += tab[i].first / 2;
    for (i = 0; i < kp; i++) sum += pan[i].first;
    if (sum % 2 == 0)
      printf("%I64d.0\n", sum / 2);
    else
      printf("%I64d.5\n", sum / 2);
    for (i = 0; i < kt; i++) printf("1 %d\n", tab[i].second);
    for (i = 0; i < k - 1 - kt; i++) printf("1 %d\n", pan[i].second);
    printf("%d ", kp - (k - 1 - kt));
    for (i = k - 1 - kt; i < kp; i++)
      printf("%d%c", pan[i].second, " \n"[i == kp - 1]);
  } else {
    for (i = 0; i < k - 1; i++) sum += tab[kt - 1 - i].first / 2;
    for (i = k - 1; i < kt; i++) sum += tab[kt - 1 - i].first;
    for (i = 0; i < kp; i++) sum += pan[i].first;
    if (kt == 0) tab[0].first = 2 * 1000 * 1000 * 1000 + 1;
    if (kp == 0) pan[0].first = 2 * 1000 * 1000 * 1000 + 1;
    sum -= min(pan[0].first, tab[0].first) / 2;
    if (sum % 2 == 0)
      printf("%I64d.0\n", sum / 2);
    else
      printf("%I64d.5\n", sum / 2);
    for (i = 0; i < k - 1; i++) printf("1 %d\n", tab[kt - 1 - i].second);
    printf("%d ", n - k + 1);
    for (i = k - 1; i < kt; i++)
      printf("%d%c", tab[kt - 1 - i].second, " \n"[i == n - 1]);
    for (i = 0; i < kp; i++) printf("%d%c", pan[i].second, " \n"[i == kp - 1]);
  }
  return 0;
}
