#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + 5;
int tree[4 * MAXN];
vector<pair<ll, ll>> sorted_gaps;
map<ll, ll> gap_map;
void update_and_harvest(int node, int start, int end, int l, int r, int task_idx,
const vector<int>& task_r, const vector<ll>& task_start_days) {
if (tree[node] != -1) {
if (tree[node] > 0) {
int prev_task = tree[node];
ll L = task_start_days[task_idx - 1] - task_start_days[prev_task];
ll final_gap = (ll)task_r[prev_task - 1] - l + L;
gap_map[final_gap] += (min(end, r) - max(start, l) + 1);
}
if (start >= l && end <= r) {
tree[node] = task_idx;
return;
}
}
int mid = (start + end) / 2;
if (tree[node] != -1) {
tree[2 * node] = tree[2 * node + 1] = tree[node];
tree[node] = -1;
}
if (l <= mid) update_and_harvest(2 * node, start, mid, l, r, task_idx, task_r, task_start_days);
if (r > mid) update_and_harvest(2 * node + 1, mid + 1, end, l, r, task_idx, task_r, task_start_days);
if (tree[2 * node] == tree[2 * node + 1] && tree[2 * node] != -1) {
tree[node] = tree[2 * node];
} else {
tree[node] = -1;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m, q;
if (!(cin >> n >> m >> q)) return 0;
vector<int> task_l(m), task_r(m);
vector<ll> task_start_days(m + 1, 0);
for (int i = 0; i < m; ++i) {
cin >> task_l[i] >> task_r[i];
task_start_days[i + 1] = task_start_days[i] + (task_r[i] - task_l[i] + 1);
}
fill(tree, tree + 4 * MAXN, 0);
for (int i = 0; i < m; ++i) {
update_and_harvest(1, 1, n, task_l[i], task_r[i], i + 1, task_r, task_start_days);
}
for (auto const& [size, count] : gap_map) {
sorted_gaps.push_back({size, count});
}
vector<ll> suffix_sum(sorted_gaps.size() + 1, 0);
for (int i = (int)sorted_gaps.size() - 1; i >= 0; --i) {
suffix_sum[i] = suffix_sum[i + 1] + sorted_gaps[i].second;
}
for (int i = 0; i < q; ++i) {
ll s;
cin >> s;
auto it = lower_bound(sorted_gaps.begin(), sorted_gaps.end(), make_pair(s, -1LL));
int idx = distance(sorted_gaps.begin(), it);
cout << suffix_sum[idx] << (i == q - 1 ? "" : " ");
}
cout << endl;
return 0;
}