#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
const long long INF = 1e12;
pair<int, int> a[MAXN];
int res[MAXN];
void solve() {
  int n, h, v;
  scanf("%d%d", &n, &h);
  for (int i = 0; i < n; i++) {
    scanf("%d", &v);
    a[i] = make_pair(v, i);
  }
  sort(a, a + n);
  reverse(a, a + n);
  long long ans = a[0].first + a[1].first - (a[n - 1].first + a[n - 2].first);
  if (n > 2) {
    if (a[1].first > a[n - 1].first + h) {
      if (a[n - 3].first < a[n - 1].first + h) {
        if (ans > a[0].first + a[1].first - a[n - 2].first - a[n - 3].first) {
          ans = a[0].first + a[1].first - a[n - 2].first - a[n - 3].first;
          res[a[n - 1].second] = 1;
        }
      } else {
        if (ans >
            a[0].first + a[1].first - a[n - 2].first - a[n - 1].first - h) {
          ans = a[0].first + a[1].first - a[n - 2].first - a[n - 1].first - h;
          res[a[n - 1].second] = 1;
        }
      }
    } else {
      if (a[n - 3].first < a[n - 1].first + h) {
        if (ans >
            a[0].first + a[n - 1].first + h - a[n - 2].first - a[n - 3].first) {
          ans =
              a[0].first + a[n - 1].first + h - a[n - 2].first - a[n - 3].first;
          res[a[n - 1].second] = 1;
        }
      } else {
        if (ans > a[0].first + a[n - 1].first + h - a[n - 2].first -
                      a[n - 1].first - h) {
          ans = a[0].first + a[n - 1].first + h - a[n - 2].first -
                a[n - 1].first - h;
          res[a[n - 1].second] = 1;
        }
      }
    }
  }
  printf("%I64d\n", ans);
  for (int i = 0; i < n; i++) {
    printf("%d ", res[i] + 1);
  }
}
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
