import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 出行计划数目
int m = sc.nextInt(); // 查询个数
int k = sc.nextInt(); // 等待核酸检测结果所需时间
final int N = 200010;
int[] q = new int[N]; // 存储每个时间段的能出行个数
// 输入每个出行计划的时间点a和核酸检测时间b
for (int i = 0; i < n; i++) {
int a = sc.nextInt(); // 计划的时间点
int b = sc.nextInt(); // 核酸检测的时间
// 计算可进入场所的时间范围[l, r]
// 如果a - b + 1 - k小于等于1,说明左端点小于等于1,直接在1时刻可进入,因此l为1
// 否则,取a - b + 1 - k
int l = Math.max(1, a - b + 1 - k);
// 计算右端点,取a - k
int r = Math.max(1, a - k);
// 在[l, r]时间段内能出行的计划个数加1,因为出行计划在这个范围内需要核酸检测结果
q[l]++;
// 在r + 1时刻不能出行,所以要将r + 1时刻的计划个数减1
q[r + 1]--;
}
// 利用差分计算每个时间的能出行个数
for (int i = 1; i < N; i++) {
q[i] += q[i - 1];
}
// 输入每个查询的时间点x,输出满足条件的出行计划个数
for (int i = 0; i < m; i++) {
int x = sc.nextInt(); // 查询的时间点
System.out.println(q[x]);
}
sc.close();
}
}