#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 5;
int n, m;
struct node {
  int id;
  int data;
};
node mk(int id, int data) {
  node ans;
  ans.id = id;
  ans.data = data;
  return ans;
}
inline bool operator<(node a, node b) { return a.data > b.data; }
priority_queue<node> q1, q2;
bool vis[N * 2];
long long ans;
long long g[N * 2];
int star[N];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &g[i], &g[i + n]);
    g[i + n] -= g[i];
    q1.push(mk(i, g[i])), q2.push(mk(i, g[i + n] + g[i]));
  }
  while (m--) {
    while (!q1.empty() && vis[q1.top().id]) q1.pop();
    while (!q2.empty() && vis[q2.top().id]) q2.pop();
    int i = q1.top().id;
    q1.pop();
    while (!q1.empty() && vis[q1.top().id]) q1.pop();
    if (m && !q2.empty() && g[i] + q1.top().data >= q2.top().data) {
      q1.push(mk(i, g[i])), i = q2.top().id, q2.pop();
    }
    if (i <= n) q1.push(mk(i + n, g[i + n]));
    ans += g[i], star[i % n == 0 ? n : i % n]++, vis[i] = true;
  }
  cout << ans << endl;
  for (int i = 1; i <= n; i++) cout << star[i];
  cout << endl;
  return 0;
}
