#include <cstdio>
#include <fstream>
#include <algorithm>
#include <vector>
#define MAX 1050000
#define HMAX 400003
#define PII pair<unsigned int, int>
#define f first
#define s second
#define pb push_back
#define mp make_pair
using namespace std;
int N, L, U, lCnt, rCnt, poz;
long long sol;
unsigned int V[MAX];
vector< PII > leftAp[HMAX], rightAp[HMAX];
char buff[MAX];
inline void add(const unsigned int &val, vector< PII > H[], int &cnt)
{
int key = val % HMAX; bool found = false;
for(size_t i = 0; i < H[key].size(); i++)
if(H[key][i].f == val)
{
found = true;
if(!H[key][i].s++) cnt++;
break;
}
if(!found) H[key].pb(mp(val, 1)), cnt++;
}
inline void rmv(const unsigned int &val, vector< PII > H[], int &cnt)
{
int key = val % HMAX;
for(size_t i = 0; i < H[key].size(); i++)
if(H[key][i].f == val)
{
if(--H[key][i].s == 0) cnt--;
return;
}
}
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]);
fclose(stdin);
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;
}