#include <bits/stdc++.h>
using namespace std;
int main() {
  int k, n;
  cin >> n >> k;
  vector<pair<long, long> > st, pe;
  for (int i = 0; i < n; i++) {
    long long a, b;
    cin >> a >> b;
    if (b == 1) {
      st.push_back(make_pair(a * 2LL, i + 1));
    } else
      pe.push_back(make_pair(a * 2LL, i + 1));
  }
  sort(st.rbegin(), st.rend());
  sort(pe.rbegin(), pe.rend());
  int dis = min(k, (int)st.size());
  int i = 0;
  int j = 0;
  long long ans = 0;
  vector<int> cart[1010];
  if (dis == k) {
    int cnum = 1;
    for (int i = 0; i < dis - 1; i++) {
      ans += st[i].first / 2LL;
      cart[cnum++].push_back(st[i].second);
    }
    for (int i = dis - 1; i < st.size(); i++) {
      ans += st[i].first;
      cart[cnum].push_back(st[i].second);
    }
    for (int j = 0; j < pe.size(); j++) {
      ans += pe[j].first;
      cart[cnum].push_back(pe[j].second);
    }
    if (pe.size() > 0)
      ans -= min(st[st.size() - 1].first / 2LL, pe[pe.size() - 1].first / 2LL);
    else
      ans -= st[st.size() - 1].first / 2LL;
  } else {
    int cnum = 1;
    for (int i = 0; i < dis; i++) {
      ans += st[i].first / 2LL;
      cart[cnum++].push_back(st[i].second);
    }
    for (int j = 0; j < pe.size(); j++) {
      if (cnum < k)
        cart[cnum++].push_back(pe[j].second);
      else
        cart[cnum].push_back(pe[j].second);
      ans += pe[j].first;
    }
  }
  cout << ans / 2LL;
  if (ans % 2)
    printf(".5\n");
  else
    printf(".0\n");
  for (int i = 1; i <= k; i++) {
    printf("%d", cart[i].size());
    for (int j = 0; j < cart[i].size(); j++) printf(" %d", cart[i][j]);
    printf("\n");
  }
  return 0;
}
