#include <bits/stdc++.h>
using namespace std;
// given an array of job start dates, a delay d, and a machine count k, checks whether all jobs can be completed with at most delay d.
bool check(const vector<long long>& job_starts, long long delay, long long machine_count) {
long long job_start_idx = 1;
long long stored_idx = -1, stored_value = 0;
// the ith working day
for (int day = 1; day < job_starts.size(); day++) {
long long available_machines = machine_count, occupied_machines = 0;
long long earliest_job_worked_on = job_starts.size();
// occupy all your machines with the earliest jobs
while (job_start_idx <= day && available_machines > 0) {
if (job_starts[job_start_idx] > 0) {
earliest_job_worked_on = min(earliest_job_worked_on, job_start_idx);
}
if ((stored_idx == job_start_idx && available_machines >= stored_value) || (stored_idx != job_start_idx && available_machines >= job_starts[job_start_idx])) {
available_machines -= (stored_idx == job_start_idx) ? stored_value : job_starts[job_start_idx];
occupied_machines += (stored_idx == job_start_idx) ? stored_value : job_starts[job_start_idx];
job_start_idx++;
} else {
if (stored_idx != job_start_idx) {
stored_idx = job_start_idx;
stored_value = job_starts[job_start_idx] - available_machines;
available_machines = 0;
} else {
stored_value -= available_machines;
available_machines = 0;
}
}
}
if (day - earliest_job_worked_on > delay) {
return false;
}
}
return true;
}
void solve() {
long long m, n, d, a;
cin >> n >> d >> m;
vector<long long> job_starts(n + 1, 0);
for (int i = 0; i < m; i++) {
cin >> a;
job_starts[a]++;
}
long long lo = 1, hi = m;
while (lo < hi) {
long long mid = (lo + hi) / 2;
if (check(job_starts, d, mid)) {
hi = mid;
} else {
lo = mid + 1;
}
}
cout << lo << "\n";
for (int i = 0; i < n; i++) {
cout << "0\n";
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}