#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define stop exit(0) #define nc -1 #define eps 1e-10 #define inf 1000000000 #define mp make_pair #define fill(array,value) memset(array,value,sizeof(array)) #define f(i,beg,end) for(int i=beg; i<=end; i++) #define F(i,beg,end) for(int i=beg; i>=end; i--) #define Max(a,b) ( (a>b)?a:b ) #define Min(a,b) ( (a, vector >, greater > > pq; ll init[300300], a[300300], b[300300], mod[300300], ans[300300], q[300300], n, m; stringstream ss; void initialize() { cin >> n; // scanf("%I64d",&n); f(i,1,n) { cin >> init[i] >> a[i] >> b[i] >> mod[i]; // scanf("%I64d%I64d%I64d%I64d",&init[i],&a[i],&b[i],&mod[i]); pq.push(mp(init[i],i)); } } void solve() { ll maxQuery = -1; cin >> m; // scanf("%I64d",&m); f(i,1,m) { cin >> q[i]; // scanf("%I64d",&q[i]); if (q[i] > maxQuery) { maxQuery = q[i]; } } f(i,1,maxQuery+10) { pair currElem = pq.top(); pq.pop(); ll arrayIndex = currElem.second; ans[i] = currElem.first; ll newElement = ans[i] + ((((ans[i]*a[arrayIndex]+b[arrayIndex]) % mod[arrayIndex]) + mod[arrayIndex]) % mod[arrayIndex]); pq.push(mp(newElement,arrayIndex)); } f(i,1,m) { ss << ans[q[i]] << '\n'; } cout << ss.str(); // printf("%s",ss.str().c_str()); } int main() { cin.sync_with_stdio(false); // input("test.txt"); input("arrays.in"); output("arrays.out"); int numberOfTests = 1; // cin >> numberOfTests; f(i,1,numberOfTests) { initialize(); solve(); } return 0; }