#include <bits/stdc++.h>
using namespace std;
struct x {
  int a, id, gp;
  bool operator<(const x& xx) const { return a < xx.a; }
} s[100005];
bool cmp(x p, x q) { return p.id < q.id; }
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &s[i].a);
    s[i].id = i;
    s[i].gp = 1;
  }
  if (n == 2) {
    printf("0\n1 1\n");
    return 0;
  }
  sort(s, s + n);
  int a1 = s[n - 1].a + s[n - 2].a - s[0].a - s[1].a;
  int a2 = max(s[n - 1].a + s[n - 2].a, s[n - 1].a + s[0].a + m) -
           min(s[0].a + s[1].a + m, s[1].a + s[2].a);
  if (a1 > a2) {
    s[0].gp = 2;
    sort(s, s + n, cmp);
    printf("%d\n", a2);
    for (int i = 0; i < n; i++) printf("%d ", s[i].gp);
  } else {
    printf("%d\n", a1);
    for (int i = 0; i < n; i++) printf("1 ");
  }
  puts("");
  return 0;
}
