#include #include typedef long long int ll; #define REP(i, n) for (ll i = 0; i < signed(n); i++) using namespace atcoder; using namespace std; int main() { ll N, M, T; cin >> N >> M >> T; assert(1 <= N && N <= 200000); assert(1 <= M && M <= 200000); assert(1 <= T && T <= 1000000000); vector A(N); REP (i, M) { ll x; cin >> x; assert(1 <= x && x <= N); A[x - 1]++; } ll ok = 1e9, ng = 0; auto judge = [&](ll mid) { ll sum = 0; REP (i, N) { if (A[i] <= mid) { sum += A[i] + (mid - A[i]) / T; } else { sum += mid; } } return M <= sum; }; while (abs(ok - ng) > 1) { ll mid = (ok + ng) / 2; if (judge(mid)) ok = mid; else ng = mid; } cout << ok << endl; return 0; }