#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pi = pair<ll, ll>;
using ld = long double;
const int N = 1e6+ 10;
int mod = 1e9 + 7;
ll n,m;
ll a[N];
ll tree[N];
void add(int x, int val) {
for(int i = x; i <= n; i += (i &(-i))) {
tree[i] += val;
}
}
ll query(int x) {
ll ret = 0;
for(int i = x; i; i -= (i & (-i))) ret += tree[i];
return ret;
}
vector<int> g[N];
void solve()
{
int k;
cin >> n >> m >> k;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
vector<pi> qr[N];
vector<ll> res(m+5, 0);
for(int i = 1; i <= m; i++) {
int l, r;
cin >> l >> r;
qr[r].push_back({l, i});
}
for(int i = 1; i <= n; i++) {
g[a[i]].push_back(i);
int len = g[a[i]].size();
if(len >= k) {
add(g[a[i]][len - k], a[i]);
if(len > k) {
add(g[a[i]][len - k - 1], -a[i]);
}
len--;
if(len >= k) { // 把上一次a[i]出现k次的痕迹消掉
add(g[a[i]][len - k], -a[i]);
if(len > k) {
add(g[a[i]][len - k - 1], a[i]);
}
}
}
for(auto p: qr[i]) {
res[p.second] = query(i) - query(p.first - 1);
}
}
for(int i = 1; i <= m; i++) cout << res[i] <<'\n';
}
int main()
{
// 请在此输入您的代码
ios::sync_with_stdio(0);
cin.tie(0);
int _ = 1;
// cin >> _;
while(_--) solve();
}