#include<cstdio>
#include<algorithm>
#define N 44000
#define inf 0x3f3f3f3f
using namespace std;
inline char gc(){
static char now[1<<16],*S,*T;
if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}
return *S++;
}
inline int read(){
int x=0,f=1;char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}
while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();
return x*f;
}
inline int sq(int x){return x*x;}
struct node{
int min,max,left,right,lazyc,lazycc;
}tree[N<<1];
struct node1{
int l,r,id,k;
}qr[N];
int cov[N],num,s[N],c[N],cc[N],n,m,pos[N],bl[N],root,tot,a[N];
inline void update(int x){
int l=tree[x].left,r=tree[x].right;
tree[x].max=max(tree[l].max,tree[r].max);
tree[x].min=min(tree[l].min,tree[r].min);
}
inline void pushdown(int x){
int l=tree[x].left,r=tree[x].right;
if (tree[x].lazyc){
if (l)tree[l].lazyc+=tree[x].lazyc,tree[l].max+=tree[x].lazyc;
if (r)tree[r].lazyc+=tree[x].lazyc,tree[r].max+=tree[x].lazyc;tree[x].lazyc=0;
}
if (tree[x].lazycc){
if (l)tree[l].lazycc+=tree[x].lazycc,tree[l].min+=tree[x].lazycc;
if (r)tree[r].lazycc+=tree[x].lazycc,tree[r].min+=tree[x].lazycc;tree[x].lazycc=0;
}
}
inline int qx(int x,int l,int r,int l1,int r1){
if (l1<=l&&r1>=r) return tree[x].max;
int mid=l+r>>1,tmp=-inf;pushdown(x);
if (l1<=mid) tmp=max(tmp,qx(tree[x].left,l,mid,l1,r1));
if (r1>mid) tmp=max(tmp,qx(tree[x].right,mid+1,r,l1,r1));return tmp;
}
inline int qn(int x,int l,int r,int l1,int r1){
if (l1<=l&&r1>=r) return tree[x].min;
int mid=l+r>>1,tmp=inf;pushdown(x);
if(l1<=mid) tmp=min(tmp,qn(tree[x].left,l,mid,l1,r1));
if (r1>mid) tmp=min(tmp,qn(tree[x].right,mid+1,r,l1,r1));return tmp;
}
inline void insertc(int x,int l,int r,int l1,int r1,int v){
if (l1<=l&&r1>=r){tree[x].max+=v;tree[x].lazyc+=v;return;}
int mid=l+r>>1;pushdown(x);
if (l1<=mid) insertc(tree[x].left,l,mid,l1,r1,v);
if (r1>mid) insertc(tree[x].right,mid+1,r,l1,r1,v);update(x);
}
inline void insertcc(int x,int l,int r,int l1,int r1,int v){
if (l1>r1) return;
if (l1<=l&&r1>=r){tree[x].min+=v;tree[x].lazycc+=v;return;}
int mid=l+r>>1;pushdown(x);
if (l1<=mid) insertcc(tree[x].left,l,mid,l1,r1,v);
if (r1>mid) insertcc(tree[x].right,mid+1,r,l1,r1,v);update(x);
}
inline bool cmp(const node1 &a,const node1 &b){return a.r<b.r;}
inline void build(int &x,int l,int r){
x=++num;int mid=l+r>>1;
if (l==r){tree[x].min=cc[l],tree[x].max=c[l];return;}
build(tree[x].left,l,mid);build(tree[x].right,mid+1,r);update(x);
}
int main(){
freopen("bzoj2138.in","r",stdin);
n=read();tree[0].min=inf;tree[0].max=-inf;
int x=read(),y=read(),z=read(),mod=read();
for (int i=1;i<=n;++i) a[i]=(sq(i-x)+sq(i-y)+sq(i-z))%mod;m=read();
qr[1].k=read();qr[2].k=read();x=read();y=read();z=read();mod=read();if (!m) return 0;
for (int i=3;i<=m;++i) qr[i].k=(qr[i-1].k*x+qr[i-2].k*y+z)%mod;
for (int i=1;i<=m;++i) qr[i].l=read(),qr[i].r=read(),qr[i].id=i,++cov[qr[i].l],--cov[qr[i].r+1];
for (int i=1;i<=n;++i){
cov[i]+=cov[i-1];if (cov[i]) a[++tot]=a[i],bl[i]=tot;
}n=tot;for (int i=1;i<=n;++i) s[i]=s[i-1]+a[i];
for (int i=1;i<=m;++i) qr[i].l=bl[qr[i].l],qr[i].r=bl[qr[i].r];sort(qr+1,qr+m+1,cmp);
//for (int i=1;i<=m;++i) printf("%d %d\n",qr[i].l,qr[i].r);
for (int i=1;i<=m;++i) c[i]-=s[qr[i].r],cc[i]-=s[qr[i].l-1],pos[qr[i].id]=i;build(root,1,m);
//for (int i=1;i<=m;++i) printf("%d %d\n",qr[i].l,qr[i].r);
//for (int i=1;i<=m;++i) printf("%d %d\n",c[i],cc[i]);
for (int i=1;i<=m;++i){
int j=pos[i],cc=qn(root,1,m,1,j),c=qx(root,1,m,j,m),ans=min(qr[j].k,cc-c);
//printf("%d %d\n",cc,c);
printf("%d\n",ans);insertc(root,1,m,j,m,ans);insertcc(root,1,m,j+1,m,ans);
}
return 0;
}