#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <climits>
#include <stdio.h>
#include <stack>
using namespace std;
bool check(vector<int> &v, int expect, long long sum, int k) {
bool ret = true;
for (int i = v.size() - expect; i < v.size(); ++i) {
if (v[i] >= expect) {
break;
}
int diff = expect - v[i];
if (diff > k || diff > sum || diff > v.size()) {
ret = false;
break;
}
sum -= diff;
}
return ret;
}
int main() {
int N, K, L;
cin >> N >> K >> L;
vector<int> v(N);
for (int i = 0; i < N; ++i) {
cin >> v[i];
}
long long sum = K * L;
sort(v.begin(), v.end());
int left = 0, right = N;
int ans = 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (check(v, mid, sum, K)) {
left = mid + 1;
ans = mid;
} else {
right = mid - 1;
}
}
cout << ans;
return 0;
}