#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, k;
  int r, c;
  pair<int, int> x[1010];
  pair<int, int> y[1010];
  int cajas[1010][1010];
  int size[1010];
  while (scanf("%d %d", &n, &k) > 0) {
    for (int i = 0; i < k; i++) size[i] = 0;
    r = c = 0;
    for (int i = 0; i < n; i++) {
      int a, b;
      scanf("%d %d", &a, &b);
      if (b == 1) {
        x[r].second = i + 1;
        x[r].first = a;
        r++;
      } else {
        y[c].second = i + 1;
        y[c].first = a;
        c++;
      }
    }
    double suma = 0.0;
    sort(x, x + r);
    sort(y, y + c);
    for (int i = 1; i < k; i++) {
      if (r) {
        suma += (1.0 * x[--r].first) / 2.0;
        cajas[i][0] = x[r].second;
        size[i] = 1;
      } else {
        suma += (1.0 * y[--c].first);
        cajas[i][0] = y[c].second;
        size[i] = 1;
      }
    }
    if (r && c) {
      for (int m = 0; m < c; m++) {
        suma += (1.0 * y[m].first);
        cajas[0][size[0]] = y[m].second;
        size[0]++;
      }
      for (int m = 0; m < r; m++) {
        suma += (1.0 * x[m].first);
        cajas[0][size[0]] = x[m].second;
        size[0]++;
      }
      if (x[0].first > y[0].first)
        suma -= (1.0 * y[0].first) / 2.0;
      else
        suma -= (1.0 * x[0].first) / 2.0;
    } else if (r) {
      suma += (1.0 * x[0].first) / 2.0;
      cajas[0][0] = x[0].second;
      size[0] = 1;
      for (int m = 1; m < r; m++) {
        suma += (1.0 * x[m].first);
        cajas[0][size[0]] = x[m].second;
        size[0]++;
      }
    } else if (c) {
      suma += (1.0 * y[0].first);
      cajas[0][0] = y[0].second;
      size[0] = 1;
      for (int m = 1; m < c; m++) {
        suma += (1.0 * y[m].first);
        cajas[0][size[0]] = y[m].second;
        size[0]++;
      }
    }
    printf("%.1lf\n", suma);
    for (int i = 0; i < k; i++) {
      printf("%d", size[i]);
      for (int m = 0; m < size[i]; m++) printf(" %d", cajas[i][m]);
      printf("\n");
    }
  }
  return 0;
}
