#include <bits/stdc++.h>
using namespace std;
struct ele {
  int ith;
  int value;
  int part;
};
ele eles[100010];
int compare1(const void *a, const void *b) {
  return ((ele *)a)->value - ((ele *)b)->value;
}
int compare2(const void *a, const void *b) {
  return ((ele *)a)->ith - ((ele *)b)->ith;
}
int myMax(int a, int b) { return a > b ? a : b; }
int myMin(int a, int b) { return a < b ? a : b; }
int main() {
  int n, h;
  int t;
  cin >> n >> h;
  int minp = 0;
  int part = 2;
  int max1 = -1, max2 = -1;
  int min1 = 1000000000, min2 = 1000000000, min3 = 1000000000;
  for (int i = 0; i < n; i++) {
    cin >> t;
    int tt = t;
    int temp;
    if (max1 < t) {
      temp = max1;
      max1 = t;
      t = temp;
    }
    if (max2 < t) {
      temp = max2;
      max2 = t;
      t = temp;
    }
    if (min1 > tt) {
      temp = min1;
      min1 = tt;
      tt = temp;
      minp = i;
    }
    if (min2 > tt) {
      temp = min2;
      min2 = tt;
      tt = temp;
    }
    if (min3 > tt) {
      temp = min3;
      min3 = tt;
      tt = temp;
    }
  }
  int min = max1 + max2 - min1 - min2;
  int p1 = min1 + min2 + h;
  int p2 = min2 + min3;
  int p3 = max1 + max2;
  int p4 = max1 + min1 + h;
  int p5 = myMax(p3, p4) - myMin(p1, p2);
  if (p5 < min) {
    min = p5;
    part = 1;
  }
  cout << min << endl;
  for (int i = 0; i < n; i++) {
    if (i == minp)
      cout << part << " ";
    else
      cout << 2 << " ";
  }
  cout << endl;
  return 0;
}
