80pts求调
#include <stack>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define IOS ios::sync_with_stdio(0);
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define per(i,x,y) for(int i=x;i>=y;i--)
#define SORT(x,y) sort(x+1,x+y+1)
#define UNQIUE(x,y) unqiue(x+1,x+y+1)
#define UPB(x,y,z) upper_bound(x+1,x+y+1,z)-x
#define LWB(x,y,z) lower_bound(x+1,x+y+1,z)-x
#define IT iterator
typedef long long ll;
const int N = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const int ecnts = 1e-6;
inline int max(int x, int y) {
if (x > y) return x;
else return y;
}
inline int min(int x, int y) {
if (x < y) return x;
else return y;
}
inline void swap(int &x, int &y) {
int t = x;
x = y;
y = t;
}
inline int pow(int x, int y) {
int ans = 1;
while (y) {
if (y % 2) ans *= x;
x *= x;
y = y >> 1;
}
return ans;
}
int a[N];
inline void solve() {
int n, m, k, y = 0;
cin >> n >> m >> k;
rep(i, 1, n) {
int x;
cin >> x;
a[x]++;
y = max(x, y);
}
int l = 0, r = m - 1, sum = 0;
rep(i, l, r) {
sum += a[i];
}
int ans = 0;
while (r <= y) {
if (a[l]) sum -= a[l];
l++;
r++;
if (a[r]) sum += a[r];
if (sum >= k) {
a[r] -= (sum - (k - 1));
ans += (sum - (k - 1));
sum = k - 1;
}
}
cout << ans;
}
signed main() {
IOS;
int T = 1;
//cin >> T;
rep(fain, 1, T) {
solve();
}
}