#include using namespace std; #define el '\n' #define fi first #define se second #define pub push_back #define pob pop_back #define pii pair #define float long double #define int long long const int mxn = 2e5 + 5; const int inf = 1e17; int n, m, k; map a; bool check(int mid) { int tobep2 = 0; int freefor = 0; for (auto p: a) { if (p.se > mid) tobep2 += p.se - mid; if (p.se < mid) freefor += (mid - p.se) / k; } return tobep2 <= freefor; } void solve() { cin >> n >> m >> k; for (int i = 1; i <= n; i++) a[i] = 0; for (int i = 1, t; i <= m; i++) { cin >> t; a[t]++; } int lo = 1, hi = inf; int ans = -1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; // cout << lo << ' ' << hi << el; if (check(mid)) { ans = mid; hi = mid - 1; } else { lo = mid + 1; } } cout << ans; // for (int i = 1; i <= 10; i++) { // cout << i << ' '; // check(i); // } } signed main() { cin.tie(0) -> sync_with_stdio(0); #define fname "cake" if (fopen(fname".inp", "r")) { freopen(fname".inp", "r", stdin); freopen(fname".out", "w", stdout); } int t = 1; // cin >> t; for (int i = 1; i <= t; i++) solve(); }