#include <bits/stdc++.h>
using namespace std;
int d[100005], a[100005];
int min(int x, int y) { return x > y ? y : x; }
int max(int x, int y) { return x > y ? x : y; }
int main() {
  int n, h, f_min1, f_min2, i, flag;
  while (scanf("%d%d", &n, &h) != EOF) {
    for (i = 1; i <= n; i++) {
      scanf("%d", &d[i]);
      a[i] = d[i];
    }
    sort(a + 1, a + n + 1);
    f_min1 = (a[n] + a[n - 1]) - (a[1] + a[2]);
    f_min2 = max(a[1] + a[n] + h, a[n] + a[n - 1]) -
             min(a[1] + a[2] + h, a[2] + a[3]);
    if (n == 2 || f_min1 <= f_min2) {
      printf("%d\n", f_min1);
      for (i = 1; i <= n; i++) {
        if (i == 1)
          printf("1");
        else
          printf(" 1");
      }
      printf("\n");
    } else {
      printf("%d\n", f_min2);
      flag = 0;
      for (i = 1; i <= n; i++) {
        if (d[i] == a[1] && !flag) {
          flag = 1;
          printf("2");
        } else
          printf("1");
        if (i != n) printf(" ");
      }
      printf("\n");
    }
  }
  return 0;
}
