#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define f1(i,n) for(int i=1;i<=n;i++)
#define __file_name ""
using namespace std;
const ll maxn=1e6+5, inf=1e18;
int n, m, q;
set<pair<int, ll>> S;
map<ll,ll> mp;
vector<pair<ll,ll>> ans;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    if(fopen(__file_name ".inp", "r")){
        freopen(__file_name ".inp", "r", stdin);
        freopen(__file_name ".out", "w", stdout);
    }
    // code here
    cin >> n >> m >> q;
    f1(i,n){
        S.insert({i, inf-1});
    }
    S.insert({n+1, -1LL});
    ll tim = 1;
    f1(i,m){
        int l, r; cin >> l >> r;
        ll rtim = tim - (l - 1);
        auto it_l = S.lower_bound(make_pair(l, inf));
//        for(auto item: S) cout << "! " << item.first << ' ' << item.second << endl;
//        cout << endl;
        assert(it_l != S.begin());
        it_l = prev(it_l);
        auto it_r = S.upper_bound(make_pair(r, inf));
        pair<int, ll> add_le = {-1, -1}, add_ri = {-1, -1};
        if(it_l->first < l){
            add_le = *it_l;
        }
        while(it_l != it_r){
            int le = it_l->first;
            ll pretime = it_l->second;
            if(next(it_l) == it_r && r + 1 != next(it_l)->first){
                add_ri = {r+1, next(it_l)->second};
            }
            it_l = S.erase(it_l);
            int ri = (it_l->first) - 1;
            le = max(le, l);
            ri = min(ri, r);
            if(rtim - pretime - 1 >= 0) mp[rtim - pretime - 1] += ri - le + 1;
        }
        if(add_le.first != -1){
            S.insert(add_le);
        }
        if(add_ri.first != -1) S.insert(add_ri);
        S.insert({l, rtim});
        tim += r - l + 1;
    }
    ll sum = 0;
    while(!mp.empty()){
        sum += mp.rbegin()->second;
        ans.push_back(make_pair(mp.rbegin()->first, sum));
        mp.erase(prev(mp.end()));
    }
    reverse(ans.begin(), ans.end());
    while(q--){
        ll s; cin >> s;
        auto it = lower_bound(ans.begin(), ans.end(), make_pair(s, -inf));
        if(it == ans.end()) cout << 0;
        else cout << it->second;
        cout << ' ';
    }
//    for(auto item: mp) cout << "ans: " << item.first << ' ' << item.second << endl;
    return 0;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:18:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |         freopen(__file_name ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:19:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |         freopen(__file_name ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |