#include <bits/stdc++.h>
using namespace std;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    q1;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    q2;
long long dap, cnt, ch[300010], n, w, a[300010], b[300010], ans[300010],
    ch2[300010];
int main() {
  long long i, t;
  pair<long long, long long> s1, s2, s3;
  scanf("%lld %lld", &n, &w);
  for (i = 1; i <= n; i++) {
    scanf("%lld %lld", &a[i], &b[i]);
    q1.push(make_pair(a[i], i));
    q2.push(make_pair(b[i], i));
  }
  while (1) {
    if (cnt == w) break;
    while (q2.size() && ch2[q2.top().second]) q2.pop();
    while (q1.size() && q1.top().second > 0 && ch[q1.top().second]) q1.pop();
    if (cnt == w - 1) {
      dap += q1.top().first;
      ans[abs(q1.top().second)]++;
      break;
    }
    s1 = q1.top();
    q1.pop();
    while (q1.size() && q1.top().second > 0 && ch[q1.top().second]) q1.pop();
    s2 = q1.top();
    if (q2.size()) s3 = q2.top();
    if (q2.size() && s1.first + s2.first >= s3.first) {
      ans[s3.second] = 1;
      cnt++;
      dap += a[s3.second];
      q1.push(s1);
      s1.first = s3.first - a[s3.second];
      s1.second = -s3.second;
      ch[s3.second] = 1;
      q2.pop();
      q1.push(s1);
      continue;
    }
    cnt++;
    dap += s1.first;
    ans[abs(s1.second)]++;
    ch2[abs(s1.second)] = 1;
    if (s1.second > 0) {
      s1.first = b[s1.second] - s1.first;
      s1.second = -s1.second;
      q1.push(s1);
    }
  }
  printf("%lld\n", dap);
  for (i = 1; i <= n; i++) printf("%d", ans[i]);
  return 0;
}
