#include <cstdio>
#include <unordered_map>
#define MAXN (1<<21)
using namespace std;
int n, L, U;
int a[MAXN];
long long sol;
unordered_map<int, int> mic, mare;
int adv(unordered_map<int, int> &m, int ind, int ok)
{
for (int k = ind+1; k <= n; k++)
{
int val = m[a[k]];
if (val == 0 && ok > 0) {
if (ok == 2)
m[a[k]]++;
return k-1;
}
if (val == 0)
ok = 1;
m[a[k]]++;
}
return n;
}
void solve()
{
int indL = 0, indU = 0;
// for (int i = 1; i <= n; i++)
// {
// if (dif <= L)
// {
// mic[a[i]]++;
// mare[a[i]]++;
// if (mic[a[i]] == 1)
// {
// dif++;
//
// indL = indU = i;
// }
// }
// else if (dif < U)
// {
// mare[a[i]]++;
// if (mare[a[i]] == 1)
// {
// dif++;
// indU = i;
// }
// }
// else break;
// }
for (int i = 1; i <= L; i++)
indL = adv(mic, indL, 2)+1;
for (int i = 1; i <= U; i++)
indU = adv(mare, indU, 0);
sol = indU-indL+1;
for (int i = 1; i <= n; i++)
{
mic[a[i]]--;
mare[a[i]]--;
if (mic[a[i]] == 0)
{
indL = adv(mic, indL, 2)+1;
}
if (mare[a[i]] == 0)
{
indU = adv(mare, indU, 0);
}
if (indL > n) break;
sol += indU-indL+1;
}
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &n, &L, &U);
for (int i = 1; i <= n; i++)
scanf("%d ", &a[i]);
solve();
printf("%lld", sol);
return 0;
}