func_code_string: #include <bits/stdc++.h>   using namespace std;   int MOD = 1e9 + 7;   long long int power(long long int a, long long int b) {     long long int res = 1;     a = a % MOD;     while (b > 0) {       if (b & 1) {         res = (res * a) % MOD;         b--;       }       a = (a * a) % MOD;       b >>= 1;     }     return res;   }   long long int fermat_inv(long long int y) { return power(y, MOD - 2); }   long long int gcd(long long int a, long long int b) {     return (b == 0) ? a : gcd(b, a % b);   }   long long int min(long long int a, long long int b) { return (a > b) ? b : a; }   long long int max(long long int a, long long int b) { return (a > b) ? a : b; }   using cd = complex<double>;   const double PI = acos(-1);   void fft(vector<cd> &a, bool invert) {     int n = a.size();     for (int i = 1, j = 0; i < n; i++) {       int bit = n >> 1;       for (; j & bit; bit >>= 1) j ^= bit;       j ^= bit;       if (i < j) swap(a[i], a[j]);     }     for (int len = 2; len <= n; len <<= 1) {       double ang = 2 * PI / len * (invert ? -1 : 1);       cd wlen(cos(ang), sin(ang));       for (int i = 0; i < n; i += len) {         cd w(1);         for (int j = 0; j < len / 2; j++) {           cd u = a[i + j], v = a[i + j + len / 2] * w;           a[i + j] = u + v;           a[i + j + len / 2] = u - v;           w *= wlen;         }       }     }     if (invert) {       for (cd &x : a) x /= n;     }   }   vector<int> mult(vector<int> &a, vector<int> &b) {     int n = 1;     while (n < 2 * max(a.size(), b.size())) n <<= 1;     vector<cd> A((a).begin(), (a).end()), B((b).begin(), (b).end());     A.resize(n);     B.resize(n);     fft(A, false);     fft(B, false);     vector<cd> C(n);     for (int i = 0; i < n; i++) C[i] = A[i] * B[i];     fft(C, true);     vector<int> ans(n);     for (int i = 0; i < n; i++) ans[i] = round(C[i].real());     return ans;   }   int f[1000005];   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     int te = 1;     while (te--) {       int n, x, y;       cin >> n >> x >> y;       vector<int> a(x + 1), b(x + 1);       for (int i = 0; i <= n; i++) {         int z;         cin >> z;         a[z] = 1;         b[x - z] = 1;       }       vector<int> v = mult(a, b);       fill(f, f + 1000005, -1);       for (int i = x + 1; i < v.size(); i++) {         if (v[i]) {           int val = 2 * (i - x) + 2 * y;           for (int j = val; j <= 1000000; j += val) f[j] = val;         }       }       int q;       cin >> q;       for (int i = 0; i < q; i++) {         int l;         cin >> l;         cout << f[l] <<    ;       }       cout <<   n ;     }   }   