#include #include #include #include using namespace std; using ll = long long; int main() { ll n, m, q; cin >> n >> m >> q; vector a(n); vector> x(q); for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < q; i++){ cin >> x[i].first; x[i].second = i; } sort(x.begin(), x.end()); vector s(n); ll c = 0; for (int i = 0; i < n-1; i++){ s[i+1] = s[i] + a[i]; c += a[i] * i * 2; } c -= s[n-1] * (n-1); auto f = [&] (int k, int i) { return -2*i*(x[k].first+s[n-1]) + 2*n*s[i] + m*i*(n-i); }; auto solve = [&] (this auto self, vector row) -> vector { int l = row.size(); if (l == 0) return {}; vector row2; for (int i = 1; i < l; i+= 2) row2.emplace_back(row[i]); vector ans2 = self(row2); vector ans(l); for (size_t i = 0; i < ans2.size(); i++) ans[2*i+1] = ans2[i]; int j = 0; for (int i = 0; i < l; i += 2) { ans[i] = j; int end = (i == l-1 ? n-1 : ans[i+1]); while (j != end) { j++; if (f(row[i], ans[i]) > f(row[i], j)) ans[i] = j; } } return ans; }; vector p(q); iota(p.begin(), p.end(), 0); vector pos = solve(p); vector ans(q); for (int i = 0; i < q; i++) { auto [xi, idx] = x[i]; ans[idx] = f(i, pos[i]) + xi*(n-1) + c; } for (int i = 0; i < q; i++) cout << ans[i] << "\n"; }