#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 100000 + 123;
struct node
{
int id, val;
node(int x, int y): id(x), val(y) {}
node(){}
}q1[MAXN],q2[MAXN];;
int a[MAXN];
int main()
{
int n, m, k;
while(scanf("%d%d%d", &n, &m, &k) != EOF)
{
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
int pos = 1;
int head = 0, tail = -1;
int head2 = 0, tail2 = -1;
int ans = 0;
for(int i = 1; i <= n; i++)
{
node now(i, a[i]);
while(tail >= head && q1[tail].val <= a[i]) tail--;
q1[++tail] = now;
while(tail2 >= head2 && q2[tail2].val >= a[i]) tail2--;
q2[++tail2] = now;
while(q1[head].val - q2[head2].val > k)
{
if(q1[head].id > q2[head2].id)
{
pos = q2[head2].id + 1;
head2++;
}
else
{
pos = q1[head].id + 1;
head++;
}
}
if(q1[head].val - q2[head2].val <= k && q1[head].val - q2[head2].val >= m)
ans = max(ans, i - pos + 1);
}
printf("%d\n", ans);
}
return 0;
}