#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9, inf = 0x7fffffff;
struct D {
  int id, v;
  D(int _id = 0, int _v = 0) : id(_id), v(_v) {}
  bool operator<(const D &o) const { return v < o.v; }
};
vector<D> d;
int n, h, o[N];
int check(int i, int a0, int a1) {
  int minf = inf, maxf = -inf;
  minf = min(minf, a0 + a1 + h);
  minf = min(minf, a0 + d[2].v);
  if (i + 1 < n) minf = min(minf, a1 + d[i + 1].v);
  if (i == 2)
    maxf = max(maxf, d[i].v + a0);
  else
    maxf = max(maxf, d[i].v + d[i - 1].v);
  if (i + 1 == n)
    ;
  else if (i + 1 == n - 1)
    maxf = max(maxf, a1 + d[n - 1].v);
  else
    maxf = max(maxf, d[n - 1].v + d[n - 2].v);
  if (i + 1 == n)
    maxf = max(maxf, a1 + d[i].v + h);
  else
    maxf = max(maxf, d[n - 1].v + d[i].v + h);
  return maxf - minf;
}
int main() {
  scanf("%d%d", &n, &h);
  for (int i = 0; i < n; ++i) {
    int x;
    scanf("%d", &x);
    d.push_back(D(i, x));
  }
  if (n == 2) {
    puts("0\n1 1");
    return 0;
  }
  sort(d.begin(), d.end());
  int god1 = (d[n - 1].v + d[n - 2].v) - (d[0].v + d[1].v);
  int god2 = inf, id = -1;
  bool swp = 0;
  for (int i = 2; i < n; ++i) {
    int a0 = d[0].v, a1 = d[1].v;
    int tmp;
    tmp = check(i, a0, a1);
    if (god2 > tmp) {
      god2 = tmp;
      id = i;
      swp = 0;
    }
    tmp = check(i, a1, a0);
    if (god2 > tmp) {
      god2 = tmp;
      id = i;
      swp = 1;
    }
  }
  if (god1 < god2) {
    printf("%d\n", god1);
    for (int i = 0; i < n; ++i) {
      if (i > 0) putchar(' ');
      putchar('1');
    }
  } else {
    if (!swp) {
      o[d[0].id] = 1;
      o[d[1].id] = 2;
    } else {
      o[d[0].id] = 2;
      o[d[1].id] = 1;
    }
    for (int i = 2; i <= id; ++i) o[d[i].id] = 1;
    for (int i = id + 1; i < n; ++i) o[d[i].id] = 2;
    printf("%d\n", god2);
    for (int i = 0; i < n; ++i) {
      if (i > 0) putchar(' ');
      printf("%d", o[i]);
    }
  }
  return 0;
}
