1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=5050;
4 const int maxm=5000005;
5 int n,m,k,ans;
6 double Max;
7 int monkey[maxn];
8 typedef pair<int,int> P;
9 P point[maxn];
10 #define Dis(x,y) (sqrt((x.first-y.first)*(x.first-y.first)+(x.second-y.second)*(x.second-y.second)))
11 struct node{
12 int cnt,fa;
13 }f[maxn];
14 int find(int x){return f[x].fa==x?x:f[x].fa=find(f[x].fa);}
15 void Union(int x,int y)
16 {
17 x=find(x),y=find(y);if(x==y) return;
18 if(f[x].cnt<=f[y].cnt) {f[x].fa=y;f[y].cnt+=f[x].cnt;}
19 else {f[y].fa=x;f[x].cnt+=f[y].cnt;}
20 }
21 struct edge{
22 int x,y;double dis;
23 }E[maxm];
24 inline bool cmp(const edge &a,const edge &b) {return a.dis<b.dis;}
25 int main()
26 {
27 scanf("%d",&k);
28 for(int i=1;i<=k;i++) scanf("%d",&monkey[i]);
29 sort(monkey+1,monkey+1+k);
30 scanf("%d",&n);
31 for(int i=1;i<=n;i++) scanf("%d%d",&point[i].first,&point[i].second);
32 for(int i=1;i<=n;i++)
33 for(int j=1;j<=i;j++)
34 {
35 if(i==j) continue;
36 E[++m].x=i;E[m].y=j;E[m].dis=Dis(point[i],point[j]);
37 }
38 for(int i=1;i<=n;i++) f[i].fa=i,f[i].cnt=1;
39 sort(E+1,E+1+m,cmp);
40 for(int i=1;i<=m;i++)
41 {
42 if(f[find(1)].cnt==n) break;
43 if(find(E[i].x)!=find(E[i].y)) Union(E[i].x,E[i].y),Max=max(Max,E[i].dis);
44 }
45 for(int i=1;i<=k;i++) if(monkey[i]>=Max) ++ans;
46 printf("%d",ans);
47 return 0;
48 }