#include <bits/stdc++.h>
using namespace std;
long long same(vector<pair<long long, int> > &x) {
  int n = x.size();
  return (x[n - 1].first + x[n - 2].first) - (x[0].first + x[1].first);
}
long long diff(vector<pair<long long, int> > &x, long long h) {
  int n = x.size();
  long long minx = min(x[0].first + x[1].first + h, x[1].first + x[2].first);
  long long maxx =
      max(x[n - 1].first + x[n - 2].first, x[0].first + x[n - 1].first + h);
  return maxx - minx;
}
int main() {
  int n, h;
  cin >> n >> h;
  vector<pair<long long, int> > a(n);
  for (int i = 0; i < (int)(n); i++) {
    long long tmp;
    cin >> tmp;
    a[i].first = tmp;
    a[i].second = i;
  }
  sort(a.begin(), a.end());
  long long h1 = same(a);
  long long h2 = diff(a, h);
  cout << min(h1, h2) << endl;
  if (h1 < h2) {
    for (int i = 0; i < (int)(n); i++) printf("%d ", 1);
  } else {
    int head = a[0].second;
    for (int i = 0; i < (int)(n); i++) {
      int ret = (i == head) ? 1 : 2;
      printf("%d ", ret);
    }
  }
  puts("");
  return 0;
}
