#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define fi first
#define se second
#define unmap unordered_map
#define unset unordered_set
#define double long double
using namespace std;
const int dx[4]{-1, 0, 1, 0}, dy[4]{0, 1, 0, -1}; //0: Up 1: Right 2: Down 3: Left
template<class X, class Y>
bool maximize(X &x, const Y &y) {
if (x < y) {
x = y;
return true;
}
return false;
}
template<class X, class Y>
bool minimize(X &x, const Y &y) {
if (x > y) {
x = y;
return true;
}
return false;
}
template<class X, class Y>
void setvaluable(X &x, const Y &y) {
if (x==-1 || x > y) x = y;
}
const int LimN=2e5+5;
int n, m, q;
int l[LimN], r[LimN], s[LimN];
int last[LimN];
vector<int>arr;
int days;
void sub1() {
for (int i=1;i<=m;i++) {
for (int j=l[i];j<=r[i];j++) {
days++;
if (!last[j]) last[j]=days;
else {
arr.push_back(days-last[j]-1);
last[j]=days;
}
}
}
sort(arr.begin(), arr.end());
for (int i=1;i<=q;i++) {
int it=lower_bound(arr.begin(), arr.end(), s[i])-arr.begin();
cout << arr.size()-it << " ";
}
}
void sub2() {
}
bool fullone=true;
void solve()
{
cin >> n >> m >> q;
for (int i=1;i<=m;i++) {
cin >> l[i] >> r[i];
if (l[i]!=1) fullone=false;
}
for (int i=1;i<=q;i++) cin >> s[i];
// if (max(n, m)<=2000) sub1();
// if (fullone) sub2();
sub1();
}
signed main() {
ios_base::sync_with_stdio(false);cin.tie(0);
int numtest=1; //cin >> numtest;
while (numtest--) {solve();}
return 0;
}