#include<cstdio>#include<cmath>#include<algorithm>#define maxn 50005usingnamespace std;struct node{int l, r, id, ans;}q[maxn];int n, m, k, a[maxn], pos[maxn], cnt[maxn];boolcmp(node const&a, node const&b){return(pos[a.l]== pos[b.l])?(pos[a.l]&1)? a.r < b.r : a.r > b.r : a.l < b.l;}boolidcmp(node const&a, node const&b){return a.id < b.id;}voidsolve(){int l =1, r =0, ans =0;for(int i =1; i <= m; i++){for(; r < q[i].r; r++) cnt[a[r +1]]++, ans +=(cnt[a[r +1]]*2-1);for(; r > q[i].r; r--) ans -=(cnt[a[r]]*2-1), cnt[a[r]]--;for(; l < q[i].l; l++) ans -=(cnt[a[l]]*2-1), cnt[a[l]]--;for(; l > q[i].l; l--) cnt[a[l -1]]++, ans +=(cnt[a[l -1]]*2-1);
q[i].ans = ans;}}intmain(){scanf("%d%d%d",&n,&m,&k);for(int i =1; i <= n; i++)scanf("%d",&a[i]);int block =sqrt(m);for(int i =1; i <= m; i++) pos[i]=(i -1)/ block +1;for(int i =1; i <= m; i++)scanf("%d%d",&q[i].l,&q[i].r), q[i].id = i;sort(q +1, q + m +1, cmp);solve();sort(q +1, q + m +1, idcmp);for(int i =1; i <= m; i++)printf("%d\n", q[i].ans);return0;}