#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, k;
  cin >> n >> k;
  vector<pair<int, pair<int, int> > > t(n);
  for (int i = 0; i < n; ++i) {
    cin >> t[i].first >> t[i].second.first;
    t[i].second.second = i;
  }
  sort(t.begin(), t.end());
  vector<vector<int> > res(k);
  int count = 0;
  int i;
  for (i = n - 1; i >= 0 && count < k; --i)
    if (t[i].second.first == 1) {
      res[count].push_back(i);
      ++count;
    }
  if (count < k) {
    int l = n - 1;
    for (int j = count; j < k; ++j) {
      while (t[l].second.first != 2) --l;
      res[j].push_back(l);
      --l;
    }
    for (int j = l; j >= 0; --j)
      if (t[j].second.first == 2) res[k - 1].push_back(j);
  } else
    for (int j = n - 1; j >= 0; --j)
      if (t[j].second.first == 2 || j < res[k - 1][0]) res[k - 1].push_back(j);
  long long ag = 0;
  for (int i = 0; i < n; ++i) ag += (long long)t[i].first;
  long long sum = 0;
  for (int i = 0; i < k; ++i)
    if (t[res[i][0]].second.first == 1)
      sum += (long long)min(t[res[i][(int)res[i].size() - 1]].first,
                            t[res[i][0]].first);
  long double s = (long double)ag - (long double)sum / 2;
  cout << fixed << setprecision(1) << s;
  long long t1 = (long long)s;
  long double s1 = (long double)t1;
  cout << endl;
  for (int i = 0; i < k; ++i) {
    cout << (int)res[i].size() << " ";
    for (int j = 0; j < (int)res[i].size(); ++j)
      cout << t[res[i][j]].second.second + 1 << " ";
    cout << endl;
  }
  return 0;
}
