/*
TASK: festb
LANG: C
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXMAX 1000000
#define MAX 200000
#define MAXDIF 12345678
FILE *in; FILE *out;
int a[MAX][2];
long long b[MAX];
long long left[MAX];
long long right[MAX];
long long l[MAX];
long long r[MAX];
long long pos, diff;
long long place;

// DA SMENQ int s LONG LONG!!!


int sort(const void *a, const void *b)
{
int *aa, *bb;

aa = (int *) a;
bb = (int *) b;

return (aa[0] - bb[0]);
}



void initialize(int m)
{
int i, c;
int last;

for (i=0; i<MAX; i++) {r[i] = 0; l[i] = 0;}


right[0] = a[0][1]; last = 0;
for (i=1; i<m; i++)
	{
	right[i] = a[i][1] + right[last];
	last = i;
	}

left[m-1] = a[m-1][1];
last = m-1;

for (i=m-2; i>=0; i--)
	{
	left[i] = a[i][1] + left[last];
	last = i;
	}


last = m-1;
for (i=m-2; i>=0; i--)
	{
	l[i] = l[last] + left[last]*(abs(a[last][0]-a[i][0]));
	last = i;
	}

last = 0; r[last] = 0;
for (i=1; i<m; i++)
	{
	r[i] = r[last] + right[last]*(abs(a[i][0]-a[last][0]));
	last = i;
	}

for (i=0; i<m; i++) b[i] = l[i]+r[i];

return;
}


int dsearch(int lft, int rght, int p1, int p2, long long sum)
{
int i;
int center;
long long pff;


if (rght - lft <= 8)
	{
	for (i=0; i<9; i++)
		{
		pff = l[p2] + r[p1];
		pff += right[p1]*(lft+i-a[p1][0]);
		pff += left[p2]*(a[p2][0] - rght + 8 - i);
		if (abs(sum - pff) < diff)
			{
			diff = abs(sum - pff);
			pos = lft+i;
			}
		}
	return;
	}

center = lft + (rght - lft)/2;
pff = l[p1] + r[p2];
pff += right[p1]*(center-a[p1][0]);
pff += left[p2]*(a[p2][0] - center);

if (sum>=pff) dsearch(center, rght, p1, p2, sum);
else dsearch(lft, center-1, p1, p2, sum);

return;
}


void findans(long long sum, int m)
{
int i, c;
int d;
long long tmp;
long long dif;


for (i=0; i<m; i++)
	{
	if (abs(b[i] - sum) < diff)
		{
		diff = abs(b[i] - sum);
		pos = a[i][0];
		if (diff == 0) return;
		}
	}


if (sum>=b[0])
	{
	tmp = sum - b[0];
	d = (floor)(tmp/left[0]);
	dif = abs(sum - b[0] - d*left[0]);
	if (dif<diff) {diff = dif; pos = a[0][0] - d;}
	dif = abs(sum - b[0] - (d+1)*left[0]);
	if (dif<diff) {diff = dif; pos = a[0][0] - d - 1;}
	}

if (sum>=b[m-1])
	{
	tmp = sum - b[m-1];
	d = (floor)(tmp/right[m-1]);
	dif = abs(sum - b[m-1] - d*right[m-1]);
	if (dif<diff) {diff = dif; pos = a[m-1][0] + d;}
	dif = abs(sum - b[m-1] - (d+1)*right[m-1]);
	if (dif<diff) {diff = dif; pos = a[m-1][0] + d + 1;}
	}

if (diff!=0)
for (i=0; i<m-1; i++)
	if (b[i]<sum && sum<b[i+1])
		dsearch(a[i][0], a[i+1][0], i, i+1, sum);

return;
}



int main(void)
{
int i, n, m;
int x, y;
long long sum;
int aa[MAXMAX];
int cnt = 0;

for (i=0; i<MAX; i++) {a[i][0] = 0; a[i][1] = 0;}
for (i=0; i<MAXMAX; i++) aa[i]=0;

//in = fopen("fest.in", "rt"); out = fopen("fest.out", "wt");
in = stdin; out = stdout;

fscanf(in, "%d %d", &m, &n);
for (i=0; i<m; i++)
    {
    fscanf(in, "%d %d", &x, &y);
    aa[x] += (short)y;
    }
for (i=0; i<MAXMAX; i++)
if (aa[i]!=0)
    {
    a[cnt][0] = i;
    a[cnt][1] = aa[i];
    cnt++;
    }

//if (m<=10000) qsort(a, m, 2*sizeof(int), sort);

initialize(cnt);
//for (i=0; i<m; i++) fprintf(out, "%ld\n", r[i]);
//for (i=0; i<m; i++) fprintf(out, "%ld\n", l[i]);
//for (i=0; i<m; i++) fprintf(out, "%ld\n", b[i]);


for (i=0; i<n; i++)
	{
	diff = MAXDIF;
	fscanf(in, "%Ld", &sum);
	findans(sum, cnt);
	fprintf(out, "%Ld %Ld\n", pos, diff);
	}

//fprintf(out, "\n");
//for (i=0; i<cnt; i++) fprintf(out, "%d %d\n", a[i][0], a[i][1]);

fclose(in);
fclose(out);

return 0;
}
