#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
struct Node {
ll task_id;
};
vector<Node> tree;
map<ll, ll> gap_counts;
void update(int node, int start, int end, int l, int r, int new_task, vector<ll>& task_r, vector<ll>& task_start_days) {
if (start > end || start > r || end < l) return;
if (start >= l && end <= r && tree[node].task_id != -1) {
if (tree[node].task_id != 0) {
ll i = tree[node].task_id;
ll gap = task_r[i-1] - l + (task_start_days[new_task-1] - (task_start_days[i-1] + (task_r[i-1] - l + 1)));
}
tree[node].task_id = new_task;
return;
}
int mid = (start + end) / 2;
if (tree[node].task_id != -1) {
tree[2 * node].task_id = tree[2 * node + 1].task_id = tree[node].task_id;
tree[node].task_id = -1;
}
update(2 * node, start, mid, l, r, new_task, task_r, task_start_days);
update(2 * node + 1, mid + 1, end, l, r, new_task, task_r, task_start_days);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m, q;
if (!(cin >> n >> m >> q)) return 0;
vector<pair<int, int>> tasks(m);
vector<ll> task_start_days(m + 1, 0);
for (int i = 0; i < m; ++i) {
cin >> tasks[i].first >> tasks[i].second;
ll duration = (ll)tasks[i].second - tasks[i].first + 1;
task_start_days[i + 1] = task_start_days[i] + duration;
}
vector<ll> s_values(q);
for (int i = 0; i < q; ++i) cin >> s_values[i];
return 0;
}