#include <bits/stdc++.h>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
typedef long long ll;
const ll lim=(1LL<<20)+5;
const ll inf=2e9+7;
ll tree[4*lim];
ll flw[lim];
ll ind[lim];
ll v[lim];
void update(ll nod,ll l,ll r,ll poz,ll val)
{
if(l==r)
{
tree[nod]=val;
return ;
}
ll med=(l+r)/2;
if(poz<=med) update(2*nod,l,med,poz,val);
else update(2*nod+1,med+1,r,poz,val);
tree[nod]=tree[2*nod]+tree[2*nod+1];
}
ll findk(ll nod,ll l,ll r,ll k)
{
if(l==r) return l;
ll med=(l+r)/2;
if(tree[2*nod]>=k)
return findk(2*nod,l,med,k);
return findk(2*nod+1,med+1,r,k-tree[2*nod]);
}
bool mycmp(ll a,ll b)
{
if(v[a]==v[b])
return a<b;
return v[a]<v[b];
}
int main()
{
ll n,l,u;
in>>n>>l>>u;
for(ll i=1;i<=n;++i)
{
in>>v[i];
ind[i]=i;
}
v[n+1]=inf;
ind[n+1]=n+1;
sort(ind+1,ind+n+2,mycmp);
ll cnt=1;
update(1,1,n+1,ind[1],1);
for(ll i=2;i<=n+1;++i)
{
if(v[ind[i]]==v[ind[i-1]])
{
flw[ind[i-1]]=ind[i];
v[ind[i-1]]=cnt;
}
else
{
update(1,1,n+1,ind[i],1);
v[ind[i-1]]=cnt;
++cnt;
}
}
ll ans=0;
v[ind[n+1]]=cnt;
for(ll i=1;i<=n;++i)
{
ll st=findk(1,1,n+1,l);
ll dr=findk(1,1,n+1,u+1);
ans+=(dr-st);
update(1,1,n+1,i,0);
if(flw[i]!=0)
update(1,1,n+1,flw[i],1);
}
out<<ans<<'\n';
return 0;
}