#include <bits/stdc++.h>
using namespace std;
const int N_MAX = 300002;
int n, w;
int W;
struct Box {
  int a, b;
  int index;
};
bool operator<(const Box &x, const Box &y) { return x.b < y.b; }
Box boxes[N_MAX];
vector<int> vn;
map<int, int> mpn;
int invn[N_MAX * 2];
struct BITNode {
  long long sum;
  int cnt;
};
BITNode BIT[N_MAX * 2];
void update(int val, int sgn) {
  int pos = mpn[val];
  for (int i = pos; i <= n * 2; i += i & -i) {
    BIT[i].cnt += sgn;
    BIT[i].sum += val * sgn;
  }
}
int queryKth(int k) {
  int ans = 0;
  for (int step = 19; step >= 0; step--)
    if (ans + (1 << step) <= n * 2 && BIT[ans + (1 << step)].cnt < k) {
      ans += (1 << step);
      k -= BIT[ans].cnt;
    }
  ans++;
  return ans;
}
BITNode queryPref(int pos) {
  BITNode ans = {0, 0};
  for (int i = pos; i >= 1; i -= i & -i) {
    ans.cnt += BIT[i].cnt;
    ans.sum += BIT[i].sum;
  }
  return ans;
}
vector<pair<int, int> > auxv;
int answer[N_MAX];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> w;
  W = w;
  for (int i = 1; i <= n; i++) {
    cin >> boxes[i].a >> boxes[i].b;
    boxes[i].index = i;
  }
  sort(boxes + 1, boxes + n + 1);
  for (int i = 1; i <= n; i++) {
    vn.push_back(boxes[i].a);
    vn.push_back(boxes[i].b - boxes[i].a);
  }
  sort(vn.begin(), vn.end());
  int current = 0;
  for (int i = 0; i < vn.size(); i++)
    if (i == 0 || vn[i] > vn[i - 1]) {
      mpn[vn[i]] = ++current;
      invn[current] = vn[i];
    }
  for (int i = 1; i <= n; i++) update(boxes[i].a, +1);
  long long minSum = LLONG_MAX;
  int minSumPos = -1;
  long long aux = 0;
  for (int i = 0; i <= n; i++) {
    int pos = queryKth(w);
    if (pos <= 2 * n) {
      BITNode q = queryPref(pos);
      long long sum = aux + q.sum - (q.cnt - w) * invn[pos];
      if (sum < minSum) {
        minSum = sum;
        minSumPos = i;
      }
    }
    if (i < n) {
      update(boxes[i + 1].a, -1);
      update(boxes[i + 1].b - boxes[i + 1].a, +1);
      aux += boxes[i + 1].a;
      w--;
    }
  }
  w = W;
  cout << minSum << "\n";
  for (int i = 1; i <= minSumPos; i++) answer[boxes[i].index] = 1;
  for (int i = 1; i <= n; i++)
    if (i <= minSumPos)
      auxv.push_back(make_pair(boxes[i].b - boxes[i].a, i));
    else
      auxv.push_back(make_pair(boxes[i].a, i));
  sort(auxv.begin(), auxv.end());
  for (int i = 0; i < w - minSumPos; i++) answer[boxes[auxv[i].second].index]++;
  for (int i = 1; i <= n; i++) cout << answer[i];
  cout << "\n";
  return 0;
}
