#include <cstdio>
#include <vector>
using namespace std;
const int NMAX = 1050000;
const int MOD = 666013;
int A[NMAX], MIN[NMAX], MAX[NMAX], n, dmin, dmax, d;
vector < pair <int, int> > HASH1[MOD + 1], HASH2[MOD + 1];
void citire (), calcul (), adauga (int, int), sterge (int, int), afisare ();
int main () {
citire ();
calcul ();
afisare ();
return 0;
}
void citire () {
freopen ("secv5.in", "r", stdin);
char aux[32];
int i, j, x;
scanf ("%d %d %d\n", &n, &dmin, &dmax);
for (i = 1; i <= n; i++) {
scanf ("%s", aux);
for (j = 0, x = 0; aux[j] >= '0' && aux[j] <= '9'; j++)
x = x * 10 + (aux[j] - '0');
A[i] = x;
}
}
void calcul () {
int p, u;
p = 1, u = 0;
while (p <= n && u <= n) {
u++;
adauga (A[u], 1);
while (d > dmax) {
sterge (A[p], 1);
p++;
}
MAX[u] = p;
}
p = n, u = n, d = 0;
while (p > 0 && u > 0) {
while (d < dmin) {
adauga (A[p], 2);
p--;
}
MIN[u] = p + 1;
sterge (A[u], 2);
u--;
}
}
void adauga (int x, int tip) {
int p = x % MOD;
vector < pair <int, int> >::iterator it;
if (tip == 1) {
for (it = HASH1[p].begin (); it != HASH1[p].end (); it++)
if ((*it).first == x) {
(*it).second++;
return;
}
HASH1[p].push_back (make_pair (x, 1)), d++;
}
if (tip == 2) {
for (it = HASH2[p].begin (); it != HASH2[p].end (); it++)
if ((*it).first == x) {
(*it).second++;
return;
}
HASH2[p].push_back (make_pair (x, 1)), d++;
}
}
void sterge (int x, int tip) {
int p = x % MOD;
vector < pair <int, int> >::iterator it;
if (tip == 1)
for (it = HASH1[p].begin (); it != HASH1[p].end (); it++)
if ((*it).first == x) {
(*it).second--;
if ((*it).second == 0)
HASH1[p].erase (it), d--;
return;
}
if (tip == 2)
for (it = HASH2[p].begin (); it != HASH2[p].end (); it++)
if ((*it).first == x) {
(*it).second--;
if ((*it).second == 0)
HASH2[p].erase (it), d--;
return;
}
}
void afisare () {
freopen ("secv5.out", "w", stdout);
int i, sol = 0;
for (i = 1; i <= n; i++)
if (MIN[i] >= MAX[i])
sol += MIN[i] - MAX[i] + 1;
printf ("%d", sol);
}