#include <bits/stdc++.h>
using namespace std;
int n, h;
int ans[2];
pair<int, int> a[100003];
bool ok[100003];
int main() {
  scanf("%d%d", &n, &h);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  if (n == 2) {
    printf("0\n1 1\n");
    exit(0);
  }
  sort(a + 1, a + n + 1);
  ans[0] = 1 << 30;
  for (int i = 0; i <= n; i++) {
    int mna = 1 << 30, mnb = 1 << 30;
    int mxa = -1 << 30, mxb = -1 << 30;
    if (i == 0 || i == n) {
      mna = a[1].first + a[2].first;
      mxa = a[n].first + a[n - 1].first;
    } else if (i == 1) {
      mna = a[2].first + a[3].first;
      mnb = a[1].first + a[2].first + h;
      mxa = a[n].first + a[n - 1].first;
      mxb = a[1].first + a[n].first + h;
    } else if (i == n - 1) {
      mna = a[1].first + a[2].first;
      mnb = a[1].first + a[n].first + h;
      mxa = a[n - 1].first + a[n - 2].first;
      mxb = a[n - 1].first + a[n].first + h;
    } else {
      mna = a[1].first + a[2].first;
      mnb = a[1].first + a[i + 1].first + h;
      mxa = a[n].first + a[n - 1].first;
      mxb = a[i].first + a[n].first + h;
    }
    int mn = min(mna, mnb);
    int mx = max(mxa, mxb);
    if (mx - mn < ans[0]) {
      ans[0] = mx - mn;
      ans[1] = i;
    }
  }
  for (int i = 1; i <= ans[1]; i++) ok[a[i].second] = true;
  printf("%d\n", ans[0]);
  for (int i = 1; i <= n; i++) {
    if (ok[i])
      printf("1 ");
    else
      printf("2 ");
  }
  printf("\n");
  return 0;
}
