#include <bits/stdc++.h>
using namespace std;

int findLargestSmallerIndex(const std::vector<long long int>& arr, long long int x) {
    int left = 0, right = arr.size() - 1;
    int result = -1; // Inicijalno postavljamo kao nepostojeci indeks.

    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (arr[mid] < x) {
            result = mid;  // Potencijalni kandidat, nastavljamo pretragu desno.
            left = mid + 1;
        } else {
            right = mid - 1;  // Nastavljamo pretragu levo.
        }
    }

    return result; // Vracamo indeks najveceg elementa manjeg od x.
}

int main()
{
    int N,Q;cin>>N>>Q;
    vector<pair<pair<long long int,long long int>,long long int>> trojke;
    vector<long long int> dani;
    long long int d1;
    long long int d2=0;
    long long int d22;
    //parovi.push_back(make_pair(make_pair(1,2),3));
    for(int i=0; i<N;i++){
        long long int tmp1,tmp2;cin>>tmp1>>tmp2;
        if(i==0){
            d1=tmp1;
            //trojke.push_back(make_pair(make_pair(tmp1-1,tmp2),tmp2));
            d2=tmp2;
            d22=tmp2;
        }else{
            trojke.push_back(make_pair(make_pair(tmp1-1,d2),tmp2));
            dani.push_back(tmp1-1);
            d2=tmp2+d2; 
        }
        
        
    }
    for(int i=0; i<Q;i++){
        int q;cin>>q;
        if(q<d1)cout<<0;
        else{
            //cout<<findLargestSmallerIndex(dani,q);
            if(findLargestSmallerIndex(dani,q)==-1){
                cout<<min(d22,q-d1+1);
            }else{
                int broj= findLargestSmallerIndex(dani,q);
                //cout<<"("<<trojke[broj].first.first<<","<<trojke[broj].first.second<<","<<trojke[broj].second<<") "<<endl;
                cout<<trojke[broj].first.second+min(q-trojke[broj].first.first,trojke[broj].second)<<endl;
            }
        }
    }
   
}