#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 5;
const int INF = (int)1e9 + 7;
const double EPS = 1e-9;
void nhap();
void process();
struct so {
  int gt, vt;
};
int n, h, y;
int F[maxn];
so a[maxn];
int res;
int main() {
  int nTest = 1;
  for (int test = 1; test <= nTest; ++test) {
    nhap();
    process();
  }
}
void nhap() {
  scanf("%d%d", &n, &h);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i].gt);
    a[i].vt = i;
  }
}
bool mycmp(const so &u, const so &v) { return u.gt < v.gt; }
void process() {
  int rmin, maxx, minn, hm;
  if (n != 2) {
    sort(a + 1, a + 1 + n, mycmp);
    hm = a[n].gt + a[1].gt + h;
    maxx = max(hm, a[n].gt + a[n - 1].gt);
    minn = min(a[2].gt + a[1].gt + h, a[2].gt + a[3].gt);
    rmin = maxx - minn;
    maxx = a[n].gt + a[n - 1].gt;
    minn = a[1].gt + a[2].gt;
    if (rmin > maxx - minn) {
      rmin = maxx - minn;
      for (int i = 1; i <= n; ++i) F[a[i].vt] = 1;
    } else {
      F[a[1].vt] = 1;
      for (int i = 2; i <= n; ++i) F[a[i].vt] = 2;
    }
  } else {
    F[1] = 1;
    F[2] = 1;
    rmin = 0;
  }
  printf("%d\n", rmin);
  for (int i = 1; i <= n; ++i) printf("%d ", F[i]);
}
