#include using namespace std; typedef pair pii; typedef long long ll; const int N = 2000086, MOD = 998244353;//, INF = 0x3f3f3f3f; const ll INF = 0x3f3f3f3f3f3f3f3f; int n, m, w[N]; struct Node { ll t, v; }e[N]; ll v[N]; vector num; int find(int x) { return lower_bound(num.begin(), num.end(), x) - num.begin(); } ll a[N], s[N]; ll pa[N], ps[N]; int main() { cin >> n; for (int i = 1; i < n + 1; i++) scanf("%lld", v + i); cin >> m; for (int i = 1; i < m + 1; i++) scanf("%lld%lld", &e[i].t, &e[i].v); ll l = 0, r = 0; vector g; for (int i = 1; i < m + 1; i++) { if (!l) l = e[i].t, r = e[i].t + e[i].v; else { if (r >= e[i].t) r += e[i].v; else g.push_back(r - l), l = e[i].t, r = e[i].t + e[i].v; } } if (l) g.push_back(r - l); for (int i = 1; i < n + 1; i++) num.push_back(v[i]); sort(num.begin(), num.end()); num.erase(unique(num.begin(), num.end()), num.end()); for (auto u : g) { ll l = 1; while (l <= u) { ll v = u / l, r = u / v; if (r <= 100000) { pa[l] += v, pa[r + 1] -= v; } else { int pl = find(l), pr = find(r + 1); if (pl < pr) a[pl] += v, a[pr] -= v; } l = r + 1; } } for (int i = 1; i <= 100000; i++) ps[i] = ps[i - 1] + pa[i]; s[0] = a[0] + ps[num[0]]; for (int i = 1; i < num.size(); i++) { s[i] = s[i - 1] + a[i]; if (num[i - 1] <= 100000) s[i] -= ps[num[i - 1]]; if (num[i] <= 100000) s[i] += ps[num[i]]; } for (int i = 1; i < n + 1; i++) printf("%lld\n", s[find(v[i])]); return 0; }