C++(差分):
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 2e6 + 10;
int a[N], s[N];
int main()
{
int n, m, k;
int t, c;
int start, end, max_end = 0;
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < n; i++){
scanf("%d%d", &t, &c);
start = max(1, t - c + 1);
end = max(1, t);
a[start]++;
a[end + 1]--;
max_end = max(max_end, end);
}
for(int i = 1; i <= max_end; i++){
s[i] = s[i - 1] + a[i];
//printf("%d\n", s[i]);
}
int q;
while(m--){
scanf("%d", &q);
cout << s[q + k] << endl;
}
}