#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 17) - 1;
const int OO = (1 << 30) - 1;
pair<int, int> a[MAXN];
int ass[MAXN];
int best;
int n, h;
int main() {
  scanf("%d%d", &n, &h);
  for (int i = 0; i < (n); ++i) {
    int x;
    scanf("%d", &x);
    a[i] = pair<int, int>(x, i);
    ass[i] = 1;
  }
  sort(a, a + n);
  int lastMin = a[0].first + a[1].first;
  int lastMax = a[n - 1].first + a[n - 2].first;
  best = lastMax - lastMin;
  int besti = 0;
  if (n > 2) {
    for (int i = (1); i < (n + 1); ++i) {
      int newMin = OO;
      int newMax = a[n - 1].first + a[n - 2].first;
      if (i != 1 and i != n)
        newMax = max(newMax, a[i - 1].first + a[n - 1].first + h);
      if (i == n) {
        newMax = max(newMax, a[0].first + a[n - 1].first + h);
      }
      if (i < n) {
        newMin = min(newMin, a[0].first + a[i].first);
      }
      if (i > 1) {
        newMin = min(newMin, a[0].first + a[1].first + h);
      }
      if (i > 2) {
        newMin = min(newMin, a[1].first + a[2].first);
      }
      if (0)
        cout << "i"
             << ": " << (i) << " "
             << "newMin"
             << ": " << (newMin) << " "
             << "newMax"
             << ": " << (newMax) << " "
             << "best"
             << ": " << (best) << " " << endl;
      if (newMax - newMin < best) {
        best = newMax - newMin;
        besti = i;
      }
    }
  }
  for (int i = (1); i < (besti); ++i) {
    ass[a[i].second] = 2;
  }
  printf("%d\n", best);
  for (int i = 0; i < (n); ++i)
    printf("%d%c", ass[i], (i == n - 1) ? '\n' : ' ');
  return 0;
}
