#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#include//#pragma GCC optimize(2)using namespace std;#define maxn 200005#define inf 0x7fffffff//#define INF 1e18#define rdint(x) scanf("%d",&x)#define rdllt(x) scanf("%lld",&x)#define rdult(x) scanf("%lu",&x)#define rdlf(x) scanf("%lf",&x)#define rdstr(x) scanf("%s",x)typedef long long ll;typedef unsigned long long ull;typedef unsigned int U;#define ms(x) memset((x),0,sizeof(x))const long long int mod = 1e9;#define Mod 1000000000#define sq(x) (x)*(x)#define eps 1e-11typedef pair pii;#define pi acos(-1.0)//const int N = 1005;#define REP(i,n) for(int i=0;i<(n);i++)typedef pair pii;inline int rd() { int x = 0; char c = getchar(); bool f = false; while (!isdigit(c)) { if (c == '-') f = true; c = getchar(); } while (isdigit(c)) { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return f ? -x : x;}ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a%b);}int sqr(int x) { return x * x; }/*ll ans;ll exgcd(ll a, ll b, ll &x, ll &y) { if (!b) { x = 1; y = 0; return a; } ans = exgcd(b, a%b, x, y); ll t = x; x = y; y = t - a / b * y; return ans;}*/int m;double rg[maxn<<2];int n;struct node { int x, y; double d;}a[maxn<<2],e[maxn<<2];int fa[maxn<<2];void init() { for (int i = 0; i <= n; i++)fa[i] = i;}double dis(int a, int b, int x, int y) { return 1.0*sqrt((a - x)*(a - x) + (b - y)*(b - y));}int findfa(int x) { if (x == fa[x])return x; return fa[x] = findfa(fa[x]);}void merge(int p, int q) { int u = findfa(p); int v = findfa(q); if (u != v)fa[u] = v;}double ans = 0;int tot = 0;bool cmp(node a, node b) { return a.d < b.d;}void kruskal() { int cnt = 0; for (int i = 1; i <= tot; i++) { int u = e[i].x; int v = e[i].y; double d = e[i].d; if (findfa(u) != findfa(v)) { merge(u, v); ans = max(ans, d); cnt++; if (cnt >= n - 1)break; } }}int main() {// ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); m = rd(); for (int i = 1; i <= m; i++)rdlf(rg[i]); n = rd(); init(); for (int i = 1; i <= n; i++)rdint(a[i].x), rdint(a[i].y); for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { e[++tot].x = i; e[tot].y = j; e[tot].d = 1.0*dis(a[i].x, a[i].y, a[j].x, a[j].y); } } sort(e + 1, e + 1 + tot, cmp); kruskal(); int num = 0; for (int i = 1; i <= m; i++) { if (rg[i] >= ans)num++; } cout << num << endl; return 0;} EPFL - Fighting