#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
using namespace std;
double const PI = acos(-1.0);
double const EPS = 1e-7;
int a[100100];
int b[100100];
int brute(int n, int h) {
  int res = 1000000000;
  for (int i = 0; i < (1 << n); i++) {
    vector<int> A, B;
    int MAX = -1000000000, MIN = 1000000000;
    for (int j = 0; j < n; j++) {
      for (int g = j + 1; g < n; g++) {
        int x = i & (1 << j);
        int y = i & (1 << g);
        x >>= j;
        y >>= g;
        int c;
        if (x == y)
          c = a[j] + a[g];
        else
          c = a[j] + a[g] + h;
        MAX = max(MAX, c);
        MIN = min(MIN, c);
      }
    }
    res = min(res, MAX - MIN);
  }
  return res;
}
int main() {
  int n, h;
  scanf("%d%d", &n, &h);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    b[i] = a[i];
  }
  sort(b, b + n);
  reverse(b, b + n);
  int MAX = b[0] + b[1];
  int MIN = b[n - 1] + b[n - 2];
  int c = b[0] + b[n - 1] + h;
  int NMAX = max(MAX, b[0] + b[n - 1] + h);
  int NMIN = min(b[n - 2] + b[n - 3], b[n - 1] + b[n - 2] + h);
  bool ok = 0;
  if (NMAX - NMIN < MAX - MIN) {
    ok = 1;
    MAX = NMAX;
    MIN = NMIN;
  }
  printf("%d\n", MAX - MIN);
  for (int i = 0; i < n; i++) {
    if (ok && a[i] == b[n - 1]) {
      printf("1 ");
      ok = 0;
    } else
      printf("2 ");
  }
}
