#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning( disable: 4996 ) using namespace std; typedef unsigned long long ull; template inline T sqr(T a) { return a*a; } template inline int size(const T& c) { return (int)c.size(); } #define zero(a) memset( &a, 0, sizeof(a) ) //#define printf //#define DBG //#define VERIFY #define ERR -1 #define INF 1000000 #define MAXN 300000 int n, m; int init[ MAXN ], a[ MAXN ], b[ MAXN ], mod[ MAXN ], q[ MAXN ]; long long last[ MAXN ]; priority_queue< pair< long long, int >, vector< pair< long long, int > >, greater< pair< long long, int > > > p; long long biggest; vector< long long > v; int main() { FILE *fin = fopen("arrays.in", "r"); FILE *fout = fopen("arrays.out", "w+"); int i; /* p.push( make_pair( 777, 2 ) ); p.push( make_pair( 7, 2 ) ); p.push( make_pair( 77, 2 ) ); printf("%lld", p.top().first ); exit(0); */ fscanf( fin, "%d", &n); for ( i = 0; i < n; i++ ) fscanf( fin, "%d %d %d %d", &init[ i ], &a[ i ], &b[ i ], &mod[ i ] ); fscanf( fin, "%d", &m ); for ( i = 0; i < m; i++ ) fscanf( fin, "%d", &q[ i ] ); for ( i = 0; i < n; i++ ) { last[ i ] = init[ i ]; p.push( make_pair( last[ i ], i ) ); } biggest = -1; while ( ( v.size() < 300000 ) || ( p.top().first < biggest ) ) { pair< long long, int > el = p.top(); p.pop(); long long x = el.first; int idx = el.second; v.push_back( x ); last[ idx ] = last[ idx ] + ( last[ idx ] * ( long long ) a[ idx ] + ( long long ) b[ idx ] ) % ( long long ) mod[ idx ]; p.push( make_pair( last[ idx ], idx ) ); biggest = max( biggest, x ); } sort( v.begin(), v.end() ); for ( i = 0; i < m; i++ ) fprintf( fout, "%I64d\n", v[ q[ i ] - 1 ] ); return 0; }