#include <bits/stdc++.h>
using namespace std;
#pragma warning(disable : 4996)
long long t[200007];
struct node {
  long long a;
  long long x;
  int ans;
};
node a[200007];
bool cmp1(node a, node b) { return a.a < b.a; }
bool cmp2(node a, node b) { return a.x < b.x; }
int b[200007];
int main() {
  std::ios::sync_with_stdio(false);
  long long n, m, d;
  cin >> n >> m >> d;
  for (long long i = 0; i < n; i++) {
    cin >> a[i].a;
    a[i].x = i;
    int cnt = 0;
    a[i].ans = 0;
  }
  sort(a, a + n, cmp1);
  long long ans = 1;
  int ok = 0;
  long long now;
  long long i = 1;
  long long cnt = 1;
  long long p = 0;
  for (i = 0; i < n; i++) {
    if (!a[i].ans) a[i].ans = cnt++;
    for (; p < n && (a[p].ans || a[p].a <= d + a[i].a); p++)
      ;
    a[p].ans = a[i].ans;
  }
  cout << cnt - 1 << endl;
  sort(a, a + n, cmp2);
  for (int i = 0; i < n; i++) cout << a[i].ans << " ";
}
