import java.util.*;
import java.lang.*;
import java.io.*;
class Dot
{
public double x, y;
public Dot() {}
public Dot(double x, double y)
{
this.x = x;
this.y = y;
}
}
public class Main
{
public static double euclidianDistanceToZero(Dot a)
{
return Math.
sqrt(a.
x*a.
x+a.
y*a.
y); }
{
Scanner in
= new Scanner
(System.
in);
int n_dot = in.nextInt();
int n_circ = in.nextInt();
Vector <Dot
> dots
= new Vector
<Dot
>();
for(int i = 0; i < n_dot; ++i)
{
Dot a = new Dot(in.nextDouble(), in.nextDouble());
if (a.y > 0)
dots.addElement(a);
}
double rads[] = new double[n_circ];
int amounts[] = new int[n_circ];
for(int i = 0; i < n_circ; ++i)
{
rads[i] = in.nextDouble();
amounts[i] = 0;
}
if (n_circ == 1)
{
for(int i = 0; i < dots.size(); ++i)
if (euclidianDistanceToZero(dots.elementAt(i)) < rads[0])
++amounts[0];
}
else
for(int i = 0; i < dots.size(); ++i)
{
int j = n_circ;
double r = euclidianDistanceToZero(dots.elementAt(i));
if (r < rads[n_circ-1]) // if dot belongs to one of the semicircles
{
if (r < rads[0]) // if dot belongs to the first semicircle
j = 0;
else if (rads[n_circ-2] <= r) // if dot belongs to the last semicircle
j = n_circ-1;
else // binary search of the smallest semicircle, which includes dot
{
int prev_l = 0, prev_r = n_circ, k;
while(j == n_circ)
{
k = (prev_l+prev_r)/2;
if (rads[k-1] <= r && r < rads[k])
j = k;
else if (r >= rads[k])
prev_l = (prev_l+k)/2;
else //if (r < rads[k-1])
prev_r = (prev_r+k)/2;
}
}
++amounts[j]; //increasing amount of dots, which belong to [j, n_circ-1] circles.
}
}
for(int accumulated_amount = 0, i = 0; i < n_circ; ++i)
{
accumulated_amount += amounts[i];
amounts[i] = accumulated_amount;
}
for(int i = 0; i < n_circ; ++i)
out.
println(String.
valueOf(amounts
[i
])); out.flush();
}
}