#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  t = 1;
  while (t--) {
    long long int n, m, d;
    cin >> n >> m >> d;
    vector<long long int> a(n);
    multiset<long long int> st;
    map<long long int, vector<long long int> > mp;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
      st.insert(a[i]);
    }
    long long int day = 1;
    vector<long long int> ans(n);
    while ((int)((st).size())) {
      long long int cur = *st.begin();
      long long int val = cur;
      mp[val].push_back(day);
      st.erase(st.begin());
      while (1) {
        if (val + d + 1 > m) {
          break;
        }
        auto it = st.upper_bound(val + d);
        if (it == st.end()) {
          break;
        }
        val = *it;
        mp[*it].push_back(day);
        st.erase(it);
      }
      day++;
    }
    cout << day - 1 << "\n";
    for (int i = 0; i < n; i++) {
      cout << mp[a[i]].back() << " ";
      mp[a[i]].pop_back();
    }
    cout << "\n";
  }
  return 0;
}
