intmain(){ boost; for (int i = 1; i <= 6; i++) cin >> a[i]; cin >> n; for (int i = 1; i <= n; i++) { cin >> b[i]; for (int j = 1; j <= 6; j++) vec.push_back({b[i] - a[j], i}); } sort(vec.begin(), vec.end());
int r = 0; for (int l = 0; l < vec.size(); l++) { if (cnt.size() < n && r + 1 == vec.size()) break; while (cnt.size() < n && r < vec.size()) { cnt[vec[r].second]++; r++; }
if (cnt.size() == n) ans = min(ans, vec[r - 1].first - vec[l].first);
cnt[vec[l].second]--; if (!cnt[vec[l].second]) cnt.erase(vec[l].second); } cout << ans << endl; return0; }
inlineintf(int x){ return -a * (x + 1) + x * (x + 1) / 2 * b * d; }
inlinevoidtripartition(){ int l = 0, r = c / d, ans = 1e18; while (r - l >= 3) { int lmid = (l + l + r) / 3; int rmid = (l + r + r) / 3; int lval = f(lmid), rval = f(rmid); if (lval < rval) r = rmid; else l = lmid; } for (int i = l; i <= r; i++) { ans = min(ans, f(i)); } cout << -ans << "\n"; }
signedmain(){ boost; cin >> tc; while (tc--) { cin >> a >> b >> c >> d; if (a > b * c) cout << -1 << "\n"; else tripartition(); } return0; }