#include <bits/stdc++.h>
using namespace std;
const int N(100010);
int n, h, s, t;
int a[N], c[N], ord[N], col[N];
bool cmp(int x, int y) { return a[x] < a[y]; }
int f(int x, int y) { return (c[x] ^ c[y]) ? a[x] + a[y] + h : a[x] + a[y]; }
int count(int s) {
  for (int i = int(0); i < int(t); ++i) c[i] = (s & (1 << i)) > 0;
  int maxv = 0, minv = 1 << 30;
  for (int i = int(0); i < int(t); ++i)
    for (int j = int(i + 1); j < int(t); ++j) {
      minv = min(minv, f(i, j));
      maxv = max(maxv, f(i, j));
    }
  for (int i = int(0); i < int(t); ++i)
    for (int j = int(n - t); j < int(n); ++j)
      if (i != j) maxv = max(maxv, f(i, j));
  for (int i = int(n - t); i < int(n); ++i)
    for (int j = int(i + 1); j < int(n); ++j) maxv = max(maxv, f(i, j));
  return maxv - minv;
}
int main() {
  cin >> n >> h;
  for (int i = int(0); i < int(n); ++i) {
    cin >> a[i];
    ord[i] = i;
  }
  sort(ord, ord + n, cmp);
  sort(a, a + n);
  int ans = 1 << 30;
  t = min(4, n);
  for (int i = int(0); i < int(1 << t); ++i)
    if (count(i) < ans) {
      ans = count(i);
      s = i;
    }
  cout << count(s) << endl;
  for (int i = int(0); i < int(n); ++i) col[ord[i]] = c[i];
  for (int i = int(0); i < int(n); ++i) cout << col[i] + 1 << " ";
  cout << endl;
  return 0;
}
