#include<bits/stdc++.h>
#define int long long
#define rep(a,b,c) for(register int a=(b);a<=(c);++a)
#define dow(a,b,c) for(register int a=(b);a>=(c);--a)
using namespace std;
const int MaxN=200000+5;
int arr[MaxN],dif[MaxN],Sum[MaxN];
signed main()
{
	register int n,q;
	scanf("%lld%lld",&n,&q);
	rep(i,1,n)
	{
		scanf("%lld",&arr[i]);
		dif[i]=(arr[i]-arr[i-1])-1;
		Sum[i]=(Sum[i-1]+dif[i]);
	}
	register int val,pos;
	while(q--)
	{
		scanf("%lld",&val);
		pos=(upper_bound(Sum+1,Sum+n+1,val-1)-(Sum+1));
		printf("%lld\n",arr[pos]+(val-Sum[pos]));
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define rep(i, l, r) for (int i = l; i <= r; ++i)
#define dep(i, r, l) for (int i = r; i >= l; --i)

void read (int &x) {
	x = 0; char c = getchar();
	while (c < '0' || c > '9') c = getchar();
	while (c >= '0' && c <= '9')
		x = x * 10 + c - 48, c = getchar();
}

const int N = 2e6 + 10, mod = 1e9 + 7;

int n, m, k, fac[N], inv[N];

int C (int n, int m) {
	if (n < m) return 0;
	if (m == 0) return 1;
	return fac[n] * inv[m] % mod * inv[n - m] % mod;
}

int Pow (int a, int k) {
	if (k == 1) return a;
	int S = Pow (a, k >> 1);
	if (k & 1) return S * S % mod * a % mod;
	else return S * S % mod;
}

signed main () {

	fac[0] = 1; rep(i, 1, N - 1) fac[i] = fac[i - 1] * i % mod;
	inv[N - 1] = Pow(fac[N - 1], mod - 2);
	dep(i, N - 2, 0) inv[i] = inv[i + 1] * (i + 1) % mod;
	
	read(n), read(m), read(k);
	if (m == 0 && k < n || m + k < n) puts("0");
	else printf("%lld", (C(n + m, n) - C(n + m, m + k + 1) + mod) % mod);

	return 0;
}