#include <cstdio>
#include <fstream>
#include <algorithm>
#define MAX 1050000
using namespace std;
int N, L, U, lCnt, rCnt, poz;
long long sol;
unsigned int aux[MAX], V[MAX];
int leftAp[MAX], rightAp[MAX];
char buff[MAX];
inline void add(int val, int V[], int &cnt)
{
if(V[val]++ == 0) cnt++;
}
inline void rmv(int val, int V[], int &cnt)
{
if(--V[val] == 0) cnt--;
}
void cit(unsigned int &X)
{
X = 0;
while(buff[poz] < '0' || buff[poz] > '9')
if(++poz == MAX) fread(buff, 1, MAX, stdin), poz = 0;
while(buff[poz] >= '0' && buff[poz] <= '9')
{
X = X * 10 + buff[poz++] - '0';
if(poz == MAX) fread(buff, 1, MAX, stdin), poz = 0;
}
}
void cit(int &X)
{
X = 0;
while(buff[poz] < '0' || buff[poz] > '9')
if(++poz == MAX) fread(buff, 1, MAX, stdin), poz = 0;
while(buff[poz] >= '0' && buff[poz] <= '9')
{
X = X * 10 + buff[poz++] - '0';
if(poz == MAX) fread(buff, 1, MAX, stdin), poz = 0;
}
}
int main()
{
freopen("secv5.in", "r", stdin); fread(buff, 1, MAX, stdin); cit(N); cit(L); cit(U);
for(int i = 1; i <= N; i++) cit(V[i]), aux[i] = V[i];
fclose(stdin); sort(aux + 1, aux + N + 1); aux[0] = 1;
for(int i = 2; i <= N; i++) if(aux[aux[0]] != aux[i]) aux[++aux[0]] = aux[i];
for(int i = 1; i <= N; i++) V[i] = lower_bound(aux + 1, aux + aux[0] + 1, V[i]) - aux;
for(int i = 1, left = 1, right = 1; i <= N && (right <= N || rCnt >= L); i++)
{
for(; left <= N; left++)
{
add(V[left], leftAp, lCnt);
if(lCnt == L)
{
rmv(V[left], leftAp, lCnt);
break;
}
}
for(; right <= N && rCnt <= U; right++)
{
add(V[right], rightAp, rCnt);
if(rCnt > U)
{
rmv(V[right], rightAp, rCnt);
break;
}
}
sol += (right - left);
rmv(V[i], leftAp, lCnt); rmv(V[i], rightAp, rCnt);
}
ofstream out("secv5.out"); out<<sol<<"\n"; out.close();
return 0;
}