#include <bits/stdc++.h>
using namespace std;
const int INF_MAX = 0x7FFFFFFF;
const int INF_MIN = -(1 << 30);
const double eps = 1e-10;
const double pi = acos(-1.0);
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / gcd(a, b));
}
template <class T>
inline void CLR(priority_queue<T, vector<T>, greater<T> > &Q) {
  while (!Q.empty()) Q.pop();
}
inline int random(int l, int r) { return rand() % (r - l + 1) + l; }
int dir_4[4][2] = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
int dir_8[8][2] = {{0, 1},  {-1, 1}, {-1, 0}, {-1, -1},
                   {0, -1}, {1, -1}, {1, 0},  {1, 1}};
int h;
vector<int> v;
int solve_1() {
  vector<int> v1 = v;
  sort(v1.begin(), v1.end());
  int n = v1.size();
  return v1[n - 1] + v1[n - 2] - v1[0] - v1[1];
}
int solve_2() {
  vector<int> v2 = v;
  sort(v2.begin(), v2.end());
  int other = v2[0];
  v2.erase(v2.begin(), v2.begin() + 1);
  int n = v2.size();
  if (v2.size() >= 2) {
    int f_max = ((v2[n - 1] + h + other) > (v2[n - 2] + v2[n - 1])
                     ? (v2[n - 1] + h + other)
                     : (v2[n - 2] + v2[n - 1]));
    int f_min = ((v2[0] + v2[1]) < (v2[0] + other + h) ? (v2[0] + v2[1])
                                                       : (v2[0] + other + h));
    return f_max - f_min;
  } else {
    return 0;
  }
}
int main() {
  int n, tmp;
  scanf("%d%d", &n, &h);
  for (int i = 0; i < n; i++) {
    scanf("%d", &tmp);
    v.push_back(tmp);
  }
  int a = solve_1();
  int b = solve_2();
  if (a >= b) {
    printf("%d\n", solve_2());
    int min = INF_MAX;
    int pos;
    for (int i = 0; i < v.size(); i++) {
      if (v[i] < min) {
        min = v[i];
        pos = i;
      }
    }
    for (int i = 0; i < v.size(); i++) {
      if (i) printf(" ");
      if (i == pos)
        printf("1");
      else
        printf("2");
    }
  } else {
    printf("%d\n", solve_1());
    for (int i = 0; i < n; i++) {
      i == 0 ? printf("2") : printf(" 2");
    }
  }
  puts("");
  return 0;
}
