Code
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n, m, k;
int p[N], w[N], a[N], last[N];
int tr[N], ans[N];
int h[N], ne[N];
vector<pair<int, int>> q[N];
inline int read()
{
int x=0;char s=getchar();
while(!isdigit(s))s=getchar();
while(isdigit(s))x=(x<<1)+(x<<3)+(s^48),s=getchar();
return x;
}
inline void print(int x)
{
if(x<10)putchar(x+'0');
else
{
print(x/10);
putchar(x%10+'0');
}
}
int lowbit(int x)
{
return x & -x;
}
void modify(int x, int k)
{
for (int i = x; i <= n; i += lowbit(i))
tr[i] += k;
}
int sum(int x)
{
int res = 0;
for (int i = x; i; i -= lowbit(i))
res += tr[i];
return res;
}
int main()
{
n = read(), m = read(), k = read();
for (int i = 1; i <= n; ++ i )
p[i] = read();
for (int i = 1; i <= n; ++ i )
w[i] = read();
for (int i = 1; i <= m; ++ i )
{
int l, r;
l = read(), r = read();
q[r].push_back({i, l});
}
for (int i = 1; i <= n; ++ i )
{
if (a[p[i]] == 0) {
h[p[i]] = i;
} else if (a[p[i]] + 1 < k) {
ne[last[p[i]]] = i;
} else {
modify(h[p[i]], -w[h[p[i]]]);
h[p[i]] = ne[h[p[i]]];
}
modify(i, w[i]);
last[p[i]] = i;
a[p[i]] ++ ;
for (int j = 0; j < q[i].size(); ++ j )
ans[q[i][j].first] = sum(i) - sum(q[i][j].second - 1);
}
for (int i = 1; i <= m; i ++ )
print(ans[i]), puts("");
return 0;
}