#include <stdio.h>
#include <stdlib.h>

typedef struct{
    long long unsigned dan;
    unsigned plazme;
} putovanje;


unsigned brojPojedenihDoXDana(long long unsigned zbirniDan, unsigned brojPutovanja, putovanje putovanja[], long long unsigned pitanja[])
{
    if(zbirniDan < putovanja[0].dan)
        return 0;

    /*
    unsigned brojPojedenih = 0;
    unsigned brojNepojedenih = 0;
    int i=0;
    while(i<brojPutovanja || putovanja[i].dan < zbirniDan)
    {
        int sledeciBrojDana = (i != (brojPutovanja-1) ? putovanja[i+1].dan : zbirniDan);

        if(putovanja[i].plazme>sledeciBrojDana)
        {
            brojNepojedenih += sledeciBrojDana;
            brojPojedenih += putovanja[i].plazme - sledeciBrojDana;
            //printf("%u ", brojPojedenih);
        }
        else
        {
            brojPojedenih += putovanja[i].plazme;
            //printf("%u\n", brojPojedenih);
        }

        //i se koriguje i u sledeci broj plazma se prenose visak prethodnih
        putovanja[i+1].plazme += brojNepojedenih;
        i++;
    }
    return brojPojedenih;
    */
    unsigned brojPojedenih = 0;

    putovanje kopijaPutovanja[brojPutovanja];

    for(int i=0; i<brojPutovanja; i++)
    {
        kopijaPutovanja[i].dan = putovanja[i].dan;
        kopijaPutovanja[i].plazme = putovanja[i].plazme;
    }

    for(int i=0; i<brojPutovanja; i++)
    {
        long long unsigned sledeciBrojDana = (i != (brojPutovanja-1) ? putovanja[i+1].dan : zbirniDan);

        if(zbirniDan<sledeciBrojDana)
            sledeciBrojDana = zbirniDan;

        //u teoriji prvi koji nije 0 rezultat treba biti razlika prva 2? resi sutra
        if(zbirniDan==pitanja[0] && putovanja[i].dan<zbirniDan)
        {
        brojPojedenih += kopijaPutovanja[i].plazme >= sledeciBrojDana ?
                         (kopijaPutovanja[i].plazme - sledeciBrojDana) :
                         zbirniDan - kopijaPutovanja[i].dan;
        }


        else if(putovanja[i].dan<zbirniDan)
        {
        brojPojedenih += kopijaPutovanja[i].plazme >= sledeciBrojDana ?
                         (kopijaPutovanja[i].plazme - sledeciBrojDana) :
                         kopijaPutovanja[i].plazme;
        }



        if(kopijaPutovanja[i].plazme > sledeciBrojDana)
            kopijaPutovanja[i+1].plazme += kopijaPutovanja[i+1].dan;



    }
    return brojPojedenih;
}

int main()
{
    unsigned brojPutovanja;
    unsigned brojPitanja;

    scanf("%u %u", &brojPutovanja, &brojPitanja);

    putovanje putovanja[brojPutovanja];
    long long unsigned pitanja[brojPitanja];

    for(int i=0; i<brojPutovanja; i++)
    {
        scanf("%llu %u", &putovanja[i].dan, &putovanja[i].plazme);
    }

    for(int i=0; i<brojPitanja; i++)
    {
        scanf("%llu", &pitanja[i]);
    }

    long long unsigned odgovori[brojPitanja];

    for(int i=0; i<brojPitanja; i++)
    {
        odgovori[i] = brojPojedenihDoXDana(pitanja[i], brojPutovanja, putovanja, pitanja);
        printf("%llu\n", odgovori[i]);
    }
    return 0;
}