const maxn=1 shl 20;maxarb=maxn shl 1;
var t:Text;
V:Array[0..maxn]of longint;
Mark,Arb:array[0..maxarb]of longint;
pas,n,la,lb,i,lg,last:longint;s:string;
Procedure Mergesort(lo,hi:longint;var a,b:array of longint);
var i,j,juma,lg:longint;
begin
if lo=hi then A[lo]:=lo else
begin
juma:=(lo+hi)div 2;mergesort(lo,juma,b,a);mergesort(juma+1,hi,b,a);
i:=lo;j:=juma+1;
for lg:=lo to hi do if(j>hi)or(i<=juma)and(V[B[i]]<=V[b[j]]) then
begin A[lg]:=B[i];inc(i);end else begin A[lg]:=B[j];inc(j);end;
end;
end;
Procedure act(nod,lo,hi,loc,cine:longint);
var juma:longint;
begin
if lo=hi then
begin
inc(mark[nod],cine);Arb[nod]:=0;if mark[nod]>0 then arb[nod]:=1;
end else
begin
juma:=(lo+hi)div 2;
if loc<=juma then act(nod*2,lo,juma,loc,cine)
else act(nod*2+1,juma+1,hi,loc,cine);
arb[nod]:=arb[nod*2+1]+arb[nod*2];
end;
end;
function get(limit:longint):int64;
var nr,pas,i:longint;return:int64;
begin
fillchar(arb,sizeof(arb),0);
return:=0;i:=0;nr:=0;
for pas:=0 to N do
begin
while (i<=N)and(nr<=limit)do
begin if arb[V[i]]=0 then inc(nr);inc(arb[V[i]]);inc(i);end;
inc(return,i-1-pas);
if nr<=limit then inc(return);
dec(Arb[V[pas]]);if arb[V[pas]]=0 then dec(nr);
end;
get:=return;
end;
{ var t1:longint;t2:longint absolute $0:$046c;}
begin
{ t1:=t2;}
assign(T,'secv5.in');reset(T);readln(T,n,la,lb);dec(n);last:=-1;lg:=-1;
for i:=0 to N do
begin
readln(t,s);
for pas:=1 to length(s) do V[i]:=V[i]*10+ord(S[pas])-ord('0');
end;close(T);
{ writeln((T2-t1)/18.2:0:6);}
MergeSort(0,N,Mark,Arb);
{ writeln((T2-t1)/18.2:0:6);}
for i:=0 to N do if V[Mark[i]]=last then V[Mark[i]]:=lg else
begin inc(lg);last:=V[mark[i]];V[mark[i]]:=lg;end;
writeln(get(lb));
writeln(get(la-1));
assign(t,'secv5.out');rewrite(T);writeln(t,get(lb)-get(la-1));close(t);
{ writeln((T2-t1)/18.2:0:6);}
end.