#include <bits/stdc++.h>
using namespace std;
int n, k, r, p, st = 1;
double ans;
struct emm {
  int c, id;
  bool operator<(const emm &rhs) const { return c < rhs.c; }
} a[1005], b[1005];
vector<int> v[1005];
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1, c, x; i <= n; i++) {
    scanf("%d %d", &c, &x);
    if (x == 1) {
      a[++r].c = c, a[r].id = i;
    } else {
      b[++p].c = c, b[p].id = i;
    }
    ans += (double)c;
  }
  sort(a + 1, a + 1 + r);
  sort(b + 1, b + 1 + p);
  for (int i = 1, j = r; i <= k && j; i++, j--)
    v[i].push_back(a[j].id), ans -= (double)a[j].c / 2.0;
  if (r < k) {
    for (int i = r + 1; i <= k; i++, st++) v[i].push_back(b[st].id);
    for (int i = st; i <= p; i++) v[k].push_back(b[i].id);
  } else {
    ans += (double)a[r - k + 1].c / 2.0;
    int minn = a[r - k + 1].c;
    for (int i = 1; i + k <= r; i++)
      v[k].push_back(a[i].id), minn = min(minn, a[i].c);
    for (int i = 1; i <= p; i++)
      v[k].push_back(b[i].id), minn = min(minn, b[i].c);
    ans -= (double)minn / 2.0;
  }
  printf("%.1lf\n", ans);
  for (int i = 1; i <= k; i++) {
    printf("%d ", (int)v[i].size());
    for (int j : v[i]) printf("%d ", j);
    printf("\n");
  }
}
