#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll INF = 100000000000ll;

#define N 100010
struct point{
    ll x, y;
    point(ll x=0, ll y=0): x(x), y(y){}
    point operator -(const point &b) const{
        return point(x-b.x, y-b.y);
    }
    ll operator %(const point &b) const{
        return x*b.y-y*b.x;
    }
};
point yama[N];
int st[N], chl[N], chr[N];
struct frac{
    ll p, q;
    frac(ll p=0, ll q=1): p(p), q(q){}
    bool operator <(const frac &b) const{
        return p*b.q < q*b.p;
    }
};
pair<frac, frac> kukan[N];

#define M 100010
frac b[M];

int main(){
    int n;
    while(scanf("%d", &n) == 1){
        for(int i=1; i<=n; i++){
            scanf("%lld%lld", &yama[i].x, &yama[i].y);
        }
        int len=1; st[1]=1;
        for(int i=2; i<=n; i++){
            while(len>=2){
                point u=yama[i]-yama[st[len]], v=yama[st[len]]-yama[st[len-1]];
                if(u%v > 0) break;
                len--;
            }
            chl[i] = st[len];
            st[++len] = i;
        }
        len=1; st[1]=n;
        for(int i=n-1; i>=1; i--){
            while(len>=2){
                point u=yama[i]-yama[st[len]], v=yama[st[len]]-yama[st[len-1]];
                if(u%v < 0) break;
                len--;
            }
            chr[i] = st[len];
            st[++len] = i;
        }
        int m;
        ll h;
        scanf("%d%lld", &m, &h);
        kukan[1].second = frac(-INF, 1);
        for(int i=2; i<=n; i++){
            ll x1=yama[i].x, y1=yama[i].y, x2=yama[chl[i]].x, y2=yama[chl[i]].y;
            if(y1 >= y2){
                kukan[i].second = frac(-INF, 1);
            }else{
                kukan[i].second = frac(x2*(y2-y1)-(h-y2)*(x1-x2), y2-y1);
            }
        }
        kukan[n].first = frac(INF, 1);
        for(int i=n-1; i>=1; i--){
            ll x1=yama[i].x, y1=yama[i].y, x2=yama[chr[i]].x, y2=yama[chr[i]].y;
            if(y1 >= y2){
                kukan[i].first = frac(INF, 1);
            }else{
                kukan[i].first = frac(x2*(y2-y1)-(h-y2)*(x1-x2), y2-y1);
            }
        }
        sort(kukan+1, kukan+n+1);
        for(int i=1; i<=m; i++){
            scanf("%lld", &b[i].p);
            b[i].q = 1;
        }
        int ans = 0;
        bool feasible = true;
        frac loli = frac(-INF, 1);
        for(int i=1, j=1; i<=n; i++){
            if(kukan[i].second < loli){
                continue;
            }
            while(j<=m && b[j]<kukan[i].first){
                j++;
            }
            j--;
            if(j==0 || !(kukan[i].second<b[j])){
                feasible = false; break;
            }
            loli = b[j]; ans++;
        }
        if(feasible){
            printf("%d\n", ans);
        }else{
            puts("you need more bulbs!");
        }
    }
    return 0;
}
