#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int inf = (int)1e9;
const double inf1 = 1e-9;
const int ss = (int)1e6 + 3;
const int base = inf;
bool pred(const pair<long long int, long long int>& i,
          const pair<long long int, long long int>& j) {
  if (i.first == j.first)
    return i.second < j.second;
  else
    return i.first < j.first;
}
int main() {
  long long int n, h;
  cin >> n >> h;
  vector<pair<long long int, long long int> > a(n);
  for (int i = 0; i < n; ++i) {
    cin >> a[i].first;
    a[i].second = i + 1;
  }
  sort(a.begin(), a.end(), pred);
  long long int r =
      (a[n - 1].first + a[n - 2].first) - (a[0].first + a[1].first);
  int num = 0;
  for (int i = 1; i < n; ++i) {
    long long int mn = a[0].first;
    if (i > 1) {
      mn += a[1].first;
    } else {
      mn = 1ll * inf * inf;
    }
    long long int mn1 = a[i].first;
    if (i < n - 1)
      mn1 += a[i + 1].first;
    else
      mn1 = 1ll * inf * inf;
    mn = min(mn, mn1);
    mn = min(a[0].first + a[i].first + h, mn);
    long long int mx = a[i - 1].first;
    if (i > 1)
      mx += a[i - 2].first;
    else {
      mx = 0;
    }
    long long int mx1 = a[n - 1].first;
    if (i < n - 1)
      mx1 += a[n - 2].first;
    else
      mx1 = -1;
    mx = max(mn, mx1);
    mx = max(a[i - 1].first + a[n - 1].first + h, mx);
    if (mx - mn < r) {
      r = mx - mn;
      num = i;
    }
  }
  vector<int> out(n);
  cout << r << endl;
  for (int i = 0; i < num; ++i) {
    out[a[i].second - 1] = 1;
  }
  for (int i = num; i < n; ++i) out[a[i].second - 1] = 2;
  for (int i = 0; i < n; ++i) cout << out[i] << " ";
  return 0;
}
