1 /*
2 * 排序+二分
3 */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #define N 501
8
9 int a[N], b[N*N], c[N];
10
11 int cmp(const void *a, const void *b) {
12 return *(int *)a - *(int *)b;
13 }
14
15 int main() {
16 int l, n, m, s, i, j, k, tmp, tmpp, left, right, mid, flag, cas = 0;
17 while (scanf("%d%d%d", &l, &n, &m) != EOF) {
18 for (i=0; i<l; ++i) scanf ("%d", &a[i]);
19 for (k=-1,i=0; i<n; ++i) {
20 scanf ("%d", &tmp);
21 for (j=0; j<l; ++j) b[++k] = tmp + a[j];
22 }
23 for (i=0; i<m; ++i) scanf ("%d", &c[i]);
24 qsort(b, k+1, sizeof(int), cmp);
25 scanf ("%d", &s);
26 printf ("Case %d:\n", ++cas);
27 while (s--) {
28 scanf ("%d", &tmpp);
29 // if (tmpp-c[0]<b[0] || tmpp-c[m-1]>b[k]) {puts("NO"); continue;}
30 flag = 0;
31 for (i=0; i<m; ++i) {
32 tmp = tmpp - c[i];
33 left = 0;
34 right = k;
35 while (left <= right) {
36 mid = (left + right) >> 1;
37 if (tmp == b[mid]) { flag = 1; break;}
38 else if (tmp < b[mid]) right = mid - 1;
39 else left = mid + 1;
40 }
41 if (flag) break;
42 }
43 if (flag) puts("YES");
44 else puts("NO");
45 }
46 }
47 return 0;
48 }