#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:65777216")
using namespace std;
int n, k;
int c[1111], t[1111];
vector<int> r[1111];
int main() {
  cin >> n >> k;
  for (int i(0); i < (n); i++) scanf("%d %d", c + i, t + i);
  vector<pair<int, int> > v;
  for (int i(0); i < (n); i++)
    if (t[i] == 1) v.push_back(pair<int, int>(c[i], i));
  sort((v).begin(), (v).end());
  reverse(v.begin(), v.end());
  for (int i(0); i < (v.size()); i++) r[min(i, k - 1)].push_back(v[i].second);
  int pos = k - 1;
  for (int i(0); i < (k); i++)
    if (r[i].size() == 0) {
      pos = i;
      break;
    }
  for (int i(0); i < (n); i++)
    if (t[i] == 2) {
      r[pos].push_back(i);
      pos++;
      pos = min(pos, k - 1);
    }
  double res = 0;
  for (int i(0); i < (k); i++) {
    int mn = 1000000000;
    long long sum = 0;
    bool hasc = 0;
    for (int j(0); j < (r[i].size()); j++) {
      if (t[r[i][j]] == 1) hasc = 1;
      mn = min(mn, c[r[i][j]]);
      sum += c[r[i][j]];
    }
    res += sum;
    res -= mn;
    if (hasc)
      res += mn / 2.;
    else
      res += mn;
  }
  printf("%.1lf\n", res);
  for (int i(0); i < (k); i++) {
    cout << r[i].size();
    for (int j(0); j < (r[i].size()); j++) printf(" %d", r[i][j] + 1);
    puts("");
  }
  return 0;
}
