#include <bits/stdc++.h>
using namespace std;
long long res = 1000000000;
vector<int> resv;
vector<pair<int, int> > v;
int h;
void Check(int s1, int s2, int s3, int t) {
  vector<int> v1;
  vector<int> v2;
  if (s1 == 1)
    v1.push_back(v[0].first);
  else
    v2.push_back(v[0].first);
  if (s2 == 1)
    v1.push_back(v[1].first);
  else
    v2.push_back(v[1].first);
  if (s3 == 1)
    v1.push_back(v[2].first);
  else
    v2.push_back(v[2].first);
  if (t == 1)
    for (int i = 3; i < v.size(); i++) v1.push_back(v[i].first), t = 1;
  else
    for (int i = 3; i < v.size(); i++) v2.push_back(v[i].first), t = 2;
  int fmin = 1000000000;
  int fmax = -1;
  if (v1.size() && v2.size()) {
    fmin = min(fmin, v1.front() + v2.front() + h);
    fmax = max(fmax, v1.back() + v2.back() + h);
  }
  if (v1.size() > 1) {
    fmin = min(fmin, v1[0] + v1[1]);
    fmax = max(fmax, v1[v1.size() - 1] + v1[v1.size() - 2]);
  }
  if (v2.size() > 1) {
    fmin = min(fmin, v2[0] + v2[1]);
    fmax = max(fmax, v2[v2.size() - 1] + v2[v2.size() - 2]);
  }
  if (fmax - fmin < res) {
    res = fmax - fmin;
    resv.clear();
    resv.push_back(s1);
    resv.push_back(s2);
    resv.push_back(s3);
    for (int i = 3; i < v.size(); i++) resv.push_back(t);
  }
}
int main() {
  int n, x;
  cin >> n >> h;
  for (int i = 0; i < n; i++) {
    cin >> x;
    v.push_back(make_pair(x, i));
  }
  sort(v.begin(), v.end());
  if (n == 2) {
    cout << "0\n1 1";
    return 0;
  } else {
    Check(1, 1, 2, 1);
    Check(1, 1, 1, 1);
    Check(1, 2, 1, 1);
    Check(1, 2, 2, 1);
    Check(1, 1, 2, 2);
    Check(1, 1, 1, 2);
    Check(1, 2, 1, 2);
    Check(1, 2, 2, 2);
    int perm[n];
    for (int i = 0; i < n; i++) perm[v[i].second] = resv[i];
    cout << res << '\n';
    for (int i = 0; i < n; i++) cout << perm[i] << ' ';
  }
}
