#include <stdio.h>
#include <vector>
using namespace std;
#define nmax 1048580
#define MAXIM 1000000
#define MODULO 666013
typedef pair<unsigned,unsigned> pereche;
unsigned int v[nmax];
vector <pereche> hash1[MODULO+1];
vector <pereche> hash2[MODULO+1];
char buff[MAXIM+2];
int poz=MAXIM-1;
inline void cit(unsigned &nr){
while(buff[poz]<'0' || buff[poz]>'9'){//nu e cifra
poz++;
if(poz==MAXIM){
fread(buff,1,MAXIM,stdin);
poz=0;
}
}
nr=0;
while(buff[poz]>='0' && buff[poz]<='9'){
nr=nr*10+buff[poz]-'0';
poz++;
if(poz==MAXIM){
fread(buff,1,MAXIM,stdin);
poz=0;
}
}
}
unsigned n;
int main(){
unsigned i;
unsigned li,ls;
freopen("secv5.in","r",stdin);
cit(n);
cit(li);
cit(ls);
unsigned aux,aux2,aux3;
for(i=0;i<n;i++){
cit(v[i]);
}
unsigned j;
unsigned dif1=0,dif2=0;
long long secv1=0,secv2=0;
int inceput1=0,inceput2=0;
li--;
for(i=0;i<n;i++){
//incerc sa-l bag in HASH1
//daca e nou (nu e deja acolo)
aux=v[i]%MODULO;
for(j=0;j<hash1[aux].size();j++){
if(hash1[aux][j].first==v[i]){
hash1[aux][j].second++;
break;
}
}
if(j==hash1[aux].size()){//nu l-am gasit, e nou
dif1++;
hash1[aux].push_back(make_pair(v[i],1));
//printf("un nou element,%u\n",v[i]);
}
//
if(dif1<=li){
secv1+=i-inceput1+1;
//printf("inceput= %d, final=%d,dif=%d, secv=%lld\n",inceput,i,dif,secv);
}else{
//am prea multe diferente
//trebuie sa tot scot de la inceput
while(dif1>li){
//il scot pe v[inceput] din hash
//printf("l-am scos pe v[%d]=%u\n",inceput,v[inceput]);
aux=v[inceput1]%MODULO;
aux3=hash1[aux].size();
for(j=0;j<aux3;j++){
if(hash1[aux][j].first==v[inceput1]){
hash1[aux][j].second--;
if(hash1[aux][j].second==0){//e singurul de tipul lui
hash1[aux][j]=hash1[aux][aux3-1];
hash1[aux].pop_back();
dif1--;
//printf("dif=%d\n",dif);
}
break;
}
}
inceput1++;
}
secv1+=i-inceput1+1;
}
//hashul 2
aux=v[i]%MODULO;
for(j=0;j<hash2[aux].size();j++){
if(hash2[aux][j].first==v[i]){
hash2[aux][j].second++;
break;
}
}
if(j==hash2[aux].size()){//nu l-am gasit, e nou
dif2++;
hash2[aux].push_back(make_pair(v[i],1));
//printf("un nou element,%u\n",v[i]);
}
//
if(dif2<=ls){
secv2+=i-inceput2+1;
//printf("inceput= %d, final=%d,dif=%d, secv=%lld\n",inceput,i,dif,secv);
}else{
//am prea multe diferente
//trebuie sa tot scot de la inceput
while(dif2>ls){
//il scot pe v[inceput] din hash
//printf("l-am scos pe v[%d]=%u\n",inceput,v[inceput]);
aux=v[inceput2]%MODULO;
aux3=hash2[aux].size();
for(j=0;j<aux3;j++){
if(hash2[aux][j].first==v[inceput2]){
hash2[aux][j].second--;
if(hash2[aux][j].second==0){//e singurul de tipul lui
hash2[aux][j]=hash2[aux][aux3-1];
hash2[aux].pop_back();
dif2--;
//printf("dif=%d\n",dif);
}
break;
}
}
inceput2++;
}
secv2+=i-inceput2+1;
}
}
FILE *fout=fopen("secv5.out","w");
fprintf(fout,"%lld\n",secv2-secv1);
//printf("li=%u,%lld\n",li,f(li));
return 0;
}