# include <stdio.h>
# define input "distincte.in"
# define output "distincte.out"
# define max 100001
int a[max],v[max],at[max],n,i,j,x,y,m,K;
long long arb1[max],arb2[max];
long long rez[max];
inline int bit(int i) { return (i&(i-1))^i; }
int pos[max];
struct point
{
int x,y;
}po[max];
int divide(int st,int dr)
{
point p = po[pos[st]];
x = pos[st];
while(st < dr)
{
while(st < dr && po[pos[dr]].y >= p.y) dr--;
pos[st] = pos[dr];
while( st < dr && po[pos[st]].y <= p.y) st++;
pos[dr] = pos[st];
}
pos[st] = x;
return st;
}
void qsort(int st,int dr)
{
int mij = divide(st,dr);
if(mij -1 > st) qsort(st, mij-1);
if( mij + 1 <dr) qsort(mij+1, dr);
}
void elimina(long long * a, int p, int x)
{
while(p <= n)
{
a[p] -= x;
p+=bit(p);
}
}
void adauga(long long * a, int p, int x)
{
while(p <= n)
{
a[p] += x;
p+=bit(p);
}
}
long long sum(long long * a, int p)
{
long long ret = 0;
while(p)
{
ret+=a[p];
p -= bit(p);
}
return ret;
}
int main()
{
freopen(input, "r", stdin);
freopen (output, "w", stdout);
scanf("%d%d%d",&n, &m, &K);
for(i = 1;i <= n+1; i++)
at[i] =1;
for(i = 2; i <= n+1; i++)
{
scanf("%d",&a[i]);
v[i] = at[a[i]];
at[a[i]] = i;
adauga(arb1, v[i], a[i]);
adauga(arb2, i-1, a[i]);
}
for ( i = 1; i <= K; i++)
{
scanf("%d %d",&po[i].x,&po[i].y);
pos[i] = i;
}
qsort(1,K);
for(i = K, j = n;j && i;--j)
{
while(po[pos[i]].y == j)
{
int x1,y1;
x = po[pos[i]].x;
y = po[pos[i]].y;
x1 = sum(arb1,x);
y1 = sum(arb2,x-1);
rez[pos[i]] = x1 - y1;
i--;
}
elimina(arb1,v[j+1],a[j+1]);
}
for(i = 1;i<= K; i++)
printf("%lld\n",rez[i]);
return 0;
}