#include <bits/stdc++.h>
using namespace std;
int N, M, K;
long long n, h;
struct Node {
  long long v;
  int p;
  int ret;
} node[100001];
bool _cmp(Node a, Node b) { return a.v < b.v; }
bool _cmp2(Node a, Node b) { return a.p < b.p; }
int main() {
  cin >> n >> h;
  for (int i = 0; i < n; i++) {
    scanf("%I64d", &node[i].v);
    node[i].p = i;
    node[i].ret = 2;
  }
  sort(node, node + n, _cmp);
  long long mn = node[0].v + node[1].v;
  long long mx = node[n - 1].v + node[n - 2].v;
  long long ret = mx - mn;
  if (ret == 0) {
    printf("0\n");
    for (int i = 0; i < n; i++) printf("1 ");
    printf("\n");
    return 0;
  }
  long long a = node[0].v + node[1].v + h;
  long long b = node[1].v + node[2].v;
  mx = max(mx, node[0].v + node[n - 1].v + h);
  mn = min(a, b);
  if (mx - mn < ret) {
    ret = mx - mn;
    node[0].ret = 1;
  }
  sort(node, node + n, _cmp2);
  cout << ret << endl;
  for (int i = 0; i < n; i++) cout << node[i].ret << " ";
  cout << endl;
  return 0;
}
