#include <bits/stdc++.h>   #pragma comment(linker,  /STACK:1073741824 )   #pragma warning(disable : 4996)   using namespace std;   const int N = 1e5 + 100;   pair<int, int> ar[N];   int col[N], us[5];   int ct(int m) {     int c = 0;     while (m) {       c += m & 1;       m >>= 1;     }     return c;   }   int main() {     int n, h;     scanf( %d%d , &n, &h);     for (int i = 0; i < n; i++) {       scanf( %d , &ar[i].first);       ar[i].second = i;     }     if (n < 8) {       int ans = 2e9, t;       for (int mk = 0; mk < (1 << n); mk++) {         int mx = -1, mn = 2e9;         for (int i = 0; i < n; i++) {           for (int j = i + 1; j < n; j++) {             int d = ar[i].first + ar[j].first;             if (((mk >> i) & 1) != ((mk >> j) & 1)) d += h;             mx = max(mx, d);             mn = min(mn, d);           }         }         if (ans > mx - mn) {           ans = mx - mn;           t = mk;         }       }       printf( %d n , ans);       for (int i = 0; i < n; i++) printf( %d  , ((t >> i) & 1) + 1);       return 0;     }     sort(ar, ar + n);     int ans = ar[n - 1].first + ar[n - 2].first - ar[0].first - ar[1].first,         s = -1, f;     for (int g = 0; g < (1 << 4); g++) {       int mn = 2e9, mx = -1, c = ct(g);       if (c != 2) continue;       for (int a = 0; a < 4; a++) {         for (int b = a + 1; b < 4; b++) {           int d = ar[a].first + ar[b].first;           if (((g >> a) & 1) != ((g >> b) & 1)) d += h;           mx = max(mx, d);           mn = min(mn, d);         }       }       for (int k = g == 0; k < (1 << 4); k++) {         c = ct(k);         if (c != 2) continue;         int cmx = mx, cmn = mn;         for (int a = 0; a < 4; a++) {           for (int b = a + 1; b < 4; b++) {             int d = ar[n - 4 + a].first + ar[n - 4 + b].first;             if (((k >> a) & 1) != ((k >> b) & 1)) d += h;             cmn = min(cmn, d);             cmx = max(cmx, d);           }         }         if (ans > cmx - cmn) {           ans = cmx - cmn;           f = g;           s = k;         }       }     }     int cans = 2e9, ind = -1;     for (int i = 0; i < n; i++) {       int j = 0, d = 0, mx = -1, mn = 2e9;       while (j == i) j++;       mn = min(mn, ar[i].first + ar[j].first + h);       d += ar[j].first;       j++;       while (j == i) j++;       d += ar[j].first;       mn = min(d, mn);       d = 0;       j = n - 1;       while (j == i) j--;       mx = max(mx, ar[i].first + ar[j].first + h);       d += ar[j].first;       j--;       while (j == i) j--;       d += ar[j].first;       mx = max(d, mx);       if (cans > mx - mn) {         cans = mx - mn;         ind = i;       }     }     if (cans < ans) {       printf( %d n , cans);       ind = ar[ind].second;       for (int i = 0; i < n; i++) {         printf( %d  , i == ind ? 2 : 1);       }       return 0;     }     if (s != -1) {       for (int i = 0; i < 4; i++) {         col[ar[i].second] = (f >> i) & 1;         us[ar[i].second] = 1;       }       for (int i = 0; i < 4; i++) {         col[ar[n - 4 + i].second] = (s >> i) & 1;         us[col[ar[n - 4 + i].second]] =             us[col[ar[n - 4 + i].second]] == 1 ? 2 : 1;       }       if (us[0] == 2)         for (int i = 5; i < n - 4; i++) col[ar[i].second] = 0;       else         for (int i = 5; i < n - 4; i++) col[ar[i].second] = 1;     }     printf( %d n , ans);     for (int i = 0; i < n; i++) printf( %d  , col[i] + 1);     return 0;   }