#include<stdio.h>
#define M 666013
struct list
{
unsigned int x;
int cnt;
list *next;
};
list *a[M],*b[M];
int v[1049000];
int unde,k1,k2;
unsigned int x;
int n,l,u;
//int rez1[2000],rez2[2000];
long long rez1,rez2;
void add(list *a[M],int &k)
{
++k;
list *aux=new list;
aux->x=x;
aux->cnt=1;
aux->next=a[unde];
a[unde]=aux;
}
list* find(list *a[M],int &k)
{
for(list *y=a[unde]; y->next!=NULL; y=y->next)
{
if(y->next->x==x)
return y;
}
return NULL;
}
inline void insert(list *a[M],int &k)
{
unde=x%M;
if(a[unde]==NULL)
{
add(a,k);
return;
}
if(a[unde]->x==x)
{
int &aux=a[unde]->cnt;
++aux;
return;
}
list *aux=find(a,k);
if(aux==NULL)
{
add(a,k);
return;
}
int &aux1=aux->next->cnt;
++aux1;
}
inline void sterge(list *a[M],int &k)
{
unde=x%M;
if(a[unde]==NULL)
return;
if(a[unde]->x==x)
{
int &aux=a[unde]->cnt;
--aux;
if(aux)
return;
else
{
--k;
list *aux1=a[unde];
a[unde]=a[unde]->next;
delete aux1;
}
return;
}
list *aux=find(a,k);
if(aux==NULL)
return;
int &ref=aux->next->cnt;
--ref;
if(ref)
return;
--k;
list *aux1=aux->next;
aux->next=aux->next->next;
delete aux1;
}
void adunare(int A[], int t)
{
int i;
for (i=1; i<=A[0] || t; i++, t/=10)
A[i] = (t += A[i]) % 10;
A[0] = i - 1;
}
void sub(int A[], int B[])
{
int i, t = 0;
for (i = 1; i <= A[0]; i++)
A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d",&n,&l,&u);
--l;
//for(int i=1; i<=n; ++i)
// v[i]+=2147483648;
int poz=1;
//rez1[0]=rez2[0]=1;
int aux;
long long aux1;
for(int i=1; i<=n; ++i)
{
scanf("%u",&v[i]);
x=v[i];
insert(a,k1);
while(k1>l)
{
x=v[poz++];
sterge(a,k1);
}
//adunare(rez1,i-poz+1);
aux=i-poz+1;
aux1=(long long)aux;
rez1+=aux1;
}
poz=1;
for(int i=1; i<=n; ++i)
{
x=v[i];
insert(b,k2);
while(k2>u)
{
x=v[poz++];
sterge(b,k2);
}
//adunare(rez2,i-poz+1);
aux=i-poz+1;
aux1=(long long)aux;
rez2+=aux1;
}
//sub(rez2,rez1);
//for(int i=rez2[0]; i; --i)
// printf("%d",rez2[i]);
//fputs("\n",stdout);
printf("%lld\n",rez2-rez1);
//v[++v[0]]=n+1;
//int aux;
//long long aux1;
/*int i=1,j1=l,j2=u+1;
for(; j2<=v[0]; ++i,++j1,++j2)
{
aux=(v[j2]-v[j1])*(v[i+1]-v[i]);
aux1=(long long)aux;
rez+=aux1;
}
for(; j1<v[0]; ++i,++j1)
{
aux=(v[v[0]]-v[j1])*(v[i+1]-v[i]);
aux1=(long long)aux;
rez+=aux;
}*/
/*int poz=1,poz1=l,poz2=u+1;
for(int i=1; i<=n && poz1<v[0]; ++i)
{
if(i>=v[poz+1])
{
++poz;
++poz1;
++poz2;
}
if(poz2>v[0])
poz2=v[0];
aux=v[poz2]-v[poz1];
aux1=(long long)aux;
rez+=aux1;
}*/
//printf("%lld\n",rez2-rez1);
return 0;
}