/*
TASK: FESTB
LANG: C++
*/

#include <cstdio>
#include <vector>
#include <map>
#include <queue>
using namespace std;

int m,n;
struct house
{
	int p; // people in the house
    int c; // koordinati
    int pl; // hora idvashti ot lqvo
    int pr; // hora idvashti ot dqsno
    long long sl; // danak za teq ot lqvo
    long long sr; // danak za teq ot dqsno
};

inline bool operator>(const house &a1,const house &a2)
{
	return a1.c > a2.c;
}
inline bool operator<(const house &a1,const house &a2)
{
	return a1.c > a2.c;
}


house a[200000];
    /*
long long findbest(int pos,long long sum)
{
      */

unsigned long long myabs(long long a1)
{
	if ( a1 < 0 ) return -a1;
    else return a1;
}



int main(void)
{
//	freopen("festb.in","r",stdin);
	scanf("%d%d",&m,&n);

    map<int,int> savp;
    int kv = 0;
	for ( int i = 0 ; i < m ; i++ )
    {
    	int ic,ip;
        scanf("%d%d",&ic,&ip);
        map<int,int>::iterator i1 = savp.find(ic);
        if ( i1 == savp.end() )
        {
        	a[kv].c = ic;
            a[kv].p = ip;
            savp[ic] = kv;
            kv++;
        }
        else a[savp[ic]].p += ip;
    }
    m = kv;

    priority_queue<house> pq;
    for ( int i = 0 ; i < m ; i++ ) pq.push(a[i]);
    
    for ( int i = 0 ; i < m ; i++ )
    {
    	a[i] = pq.top();
        pq.pop();
    }
                /*
    for ( int i = 0 ; i < m ; i++ )
    	printf("%d %d\n",a[i].c,a[i].p);
                  */
    a[0].pl = a[0].sl = 0LL;
    for ( int i = 1 ; i < m ; i++ )
    {
    	a[i].pl = a[i-1].pl + a[i-1].p;
        a[i].sl = a[i-1].sl + a[i-1].p*(a[i].c-a[i-1].c);
    }

    a[m-1].pr = a[m-1].sr = 0;
    for ( int i = m - 2 ; i >= 0 ; i-- )
    {
    	a[i].pr = a[i+1].pr + a[i+1].p;
        a[i].sr = a[i+1].sr + a[i+1].p*(a[i+1].c-a[i].c);
    }

    long long int min_t = 1000000000000000LL;
    int min_ind;

    for ( int i = 0 ; i < m ; i++ )
    	if ( a[i].sl+a[i].sr < min_t )
        {
        	min_t = a[i].sl + a[i].sr;
            min_ind = i;
        }

//   	printf("%lld\n",min_t);
    vector <pair<int,long long> > an;
    for ( int i = 0 ; i < n ; i++ )
    {
        long long sum;
        scanf("%lld",&sum);
//		printf("pl = %d\npr = %d\np = %d\n",a[min_ind].pl,a[min_ind].pr,a[min_ind].p);

        int wh;
        long long answ = 1000000000000000LL;
        int pl = a[min_ind].pl;
        int pr = a[min_ind].pr;
        int pe = a[min_ind].p;

        if ( sum < min_t ) // ako sluchaino iskat po-malko kintaji
        {
			an.push_back(pair<int,long long>(a[min_ind].c,min_t-sum));
        	continue;
        }
        //////// neka 1vo se dvijim nalqvo
        int lk = (sum-min_t)/(pe+pr-pl);
        if ( min_ind > 0 )
        {
        	if ( lk < a[min_ind].c - a[min_ind-1].c )
            {
		        int lka = lk*(pe+pr-pl)+min_t;
		        if ( answ > myabs(sum-lka) )
        		{
	        		answ = myabs(sum-lka);
			        wh = a[min_ind].c - lk;
		        }
        		lk++;
	    	    lka = lk*(pe+pr-pl)+min_t;
    	    	wh = a[min_ind].c - lk;
    	    	answ = myabs(sum-lka);
	    	    if ( answ > myabs(sum-lka) )
		        {
        			answ = myabs(sum-lka);
			        wh = a[min_ind].c - lk;
    	    	}
            }
        }
        if ( min_ind == 0 )
        {
//        	if ( lk < a[min_ind].c - a[min_ind-1].c )
  //          {
		        int lka = lk*(pe+pr-pl)+min_t;
		        if ( answ > myabs(sum-lka) )
        		{
	        		answ = myabs(sum-lka);
			        wh = a[min_ind].c - lk;
		        }
        		lk++;
	    	    lka = lk*(pe+pr-pl)+min_t;
    	    	wh = a[min_ind].c - lk;
    	    	answ = myabs(sum-lka);
	    	    if ( answ > myabs(sum-lka) )
		        {
        			answ = myabs(sum-lka);
			        wh = a[min_ind].c - lk;
    	    	}
    //        }
        }
		// sega za nadqsno e analogichno , lele samo dano ne go sbarkam
        int rk = (sum-min_t)/(pe-pr+pl);
        if ( min_ind < m - 1 )
		{
	        if ( rk < a[min_ind+1].c - a[min_ind].c )
		    {
            	int rka = rk*(pe-pr+pl)+min_t;
    	    	if ( answ > myabs(sum-rka) )
	    	    {
		        	answ = myabs(sum-rka);
			        wh = a[min_ind].c + rk;
        		}
		        rk++;
        		rk = (sum-min_t)/(pe-pr+pl);
		        rka = rk*(pe-pr+pl)+min_t;
        		if ( answ > myabs(sum-rka) )
		        {
        			answ = myabs(sum-rka);
			        wh = a[min_ind].c + rk;
        		}
        	}
        }
        if ( min_ind == m - 1 )
		{
//	        if ( lk < a[min_ind+1].c - a[min_ind1].c )
//		    {
            	int rka = rk*(pe-pr+pl)+min_t;
    	    	if ( answ > myabs(sum-rka) )
	    	    {
		        	answ = myabs(sum-rka);
			        wh = a[min_ind].c + rk;
        		}
		        rk++;
        		rk = (sum-min_t)/(pe-pr+pl);
		        rka = rk*(pe-pr+pl)+min_t;
        		if ( answ > myabs(sum-rka) )
		        {
        			answ = myabs(sum-rka);
			        wh = a[min_ind].c + rk;
        		}
//        	}
        }
		an.push_back(pair<int,long long>(wh,answ));
    }
/*
    for ( int i = 0 ; i < m ; i++ )
    	printf("%d ",a[i].sl);
    printf("\n");
    for ( int i = 0 ; i < m ; i++ )
    	printf("%d ",a[i].sr);
*/
	for ( int i = 0 ; i < an.size() ; i++ )
    {
    	int wh = an[i].first;
        long long ans = an[i].second;

        printf("%d %lld\n",wh,ans);
    }

    return 0;
}
