#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<stdlib.h>
#include<cmath>
#include<algorithm>
using namespace std;
#define rd(x) scanf("%d",&x)
#define rdd(x,y) scanf("%d%d",&x,&y)
#define rddd(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define rds(s) scanf("%s",s)
#define rep(i,n) for(int i=0;i<n;i++)
#define LL long long
const int N = 1e3+10;
const int M=5e5+10;
const int inf=1e9;
const double esp=1e-8;
const int MOD=1e9+7;
int xx1,yy1,x2,y2;
int n,m,k;
int dcmp(double x){
if(fabs(x)<esp) return 0;
return x<0?-1:1;
}
struct Point{
double x,y;
Point(double _x=0,double _y=0){
x=_x;y=_y;
}
}point[N];
struct Line{
Point s,e;
Line(){}
Line(Point _s,Point _e){
s=_s;
e=_e;
}
}line[N];
int cross(Point a,Point b,Point c){
return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
bool cmp(const Line&a,const Line&b){
return a.s.x<b.s.x;
}
int cnt[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("aaa","r",stdin);
#endif
while(~scanf("%d",&n),n){
if(n==0) break;
rddd(m,xx1,yy1);
rdd(x2,y2);
for(int i=1;i<=n;i++){
rdd(x,y);
line[i].s=Point(x,yy1);
line[i].e=Point(y,y2);
}
n++;
line[n].s=Point(x2+1,yy1);
line[n].e=Point(x2+1,y2);
sort(line+1,line+1+n,cmp);
for(int i=1;i<=m;i++){
rdd(x,y);
point[i].x=x;
point[i].y=y;
}
memset(cnt,0,sizeof cnt);
for(int i=1;i<=m;i++){
int l=1,r=n;
int ans=1;
while(l<=r){
int mid=l+r>>1;
int ret=cross(line[mid].s,point[i],line[mid].e);
if(ret>=0){
ans=mid;
r=mid-1;
}else l=mid+1;
}
cnt[ans]++;
}
sort(cnt+1,cnt+1+n);
puts("Box");
int i=1;
for(int j=0;j<=m;j++){
if(cnt[i]==j){
int num=0;
while(i<=n && cnt[i]==j){num++;i++;}
if(j) printf("%d: %d\n",j,num);
}
}
}
return 0;
}