#include<bits/stdc++.h> 
using namespace std;
namespace Ruri{
    #define ms(a,b) memset(a,b,sizeof(a))
    #define repi(i,a,b) for(int i=a,bbb=b;i<=bbb;++i)//attention reg int or reg ll ?
    #define repd(i,a,b) for(int i=a,bbb=b;i>=bbb;--i)
    #define reps(s) for(int i=head[s],v=e[i].to;i;i=e[i].nxt,v=e[i].to)
    #define ce(i,r) i==r?'\n':' '
    #define pb push_back 
    #define all(x) x.begin(),x.end()
    #define gmn(a,b) a=min(a,b)
    #define gmx(a,b) a=max(a,b)
    #define fi first
    #define se second                         
    typedef long long ll;
    typedef unsigned long long ull;
    typedef double db;
    const int infi=1e9;//infi较大，注意涉及inf相加时爆int
    const ll infl=4e18;
    inline ll ceil_div(ll a,ll b){ return (a+b-1)/b; }
    inline ll pos_mod(ll a,ll b){ return (a%b+b)%b; }
    //std::mt19937 rnd(time(0));//std::mt19937_64 rnd(time(0));
}
using namespace Ruri;
namespace Read{
    #define ss(a) scanf("%s",a)
    inline int ri(){ int x; scanf("%d",&x); return x; }
    inline ll rl(){ ll x;  scanf("%lld",&x); return x; }
    inline db rd(){ db x; scanf("%lf",&x); return x; }
}
namespace DeBug{
    #define pr(x) cout<<#x<<": "<<(x)<<endl
    #define pra(x,a,b) cout<<#x<<": "<<endl; \
            repi(i,a,b) cout<<x[i]<<" ";     \
            puts("");   
    #define FR(a) freopen(a,"r",stdin)
    #define FO(a) freopen(a,"w",stdout)
}
using namespace Read;
using namespace DeBug;
const int MAX_N=105;
const int mod=1e9+7;
inline void Add(int &x,int y){ x+=y;if(x>=mod) x-=mod; }
int n,b[MAX_N],c[MAX_N];
int sb[MAX_N];
int f[MAX_N*MAX_N],g[MAX_N*MAX_N];
map<int,int> ans;
int Solve(int x)
{
	repi(i,0,10001) g[i]=1;
	repi(i,1,n){
		int lim=i*x+sb[i];
		ms(f,0);
		for(int j=max(0,lim);j<=10001;++j) f[j]=(g[j]-(j-c[i]-1>=0?g[j-c[i]-1]:0)+mod)%mod;
		ms(g,0),g[0]=f[0];
		for(int j=1;j<=10001;++j) g[j]=(1ll*g[j-1]+f[j])%mod;
	}
	return g[10001];
}
int main()
{
	n=ri();
	int prod=1;
	repi(i,1,n) c[i]=ri(),prod=1ll*prod*(c[i]+1)%mod;
	repi(i,1,n-1) b[i]=ri();
	repi(i,1,n)repi(j,1,i-1) sb[i]+=(i-j)*b[j];
	int l=0,r=infi,mx_c=*max_element(c+1,c+n+1);
	repi(i,1,n) gmn(l,-((sb[i]-1)/i+1)),gmn(r,(n*mx_c-sb[i]-1)/i+1);
	repi(i,l,r) ans[i]=Solve(i);
	int Q=ri();
	while(Q--)
	{
		int x=ri();
		if(x>r) puts("0");
		else if(x<l) printf("%d\n",prod);
		else printf("%d\n",ans[x]);
	}
    return 0;
}
