#include<stdio.h>
#define min(a,b) ((a<=b)?a:b)
int niv[2001],mm,sm[17][2001],cc[17][2001],ppp,A,B,C,D,x,sc,y,z,ll,pp,b[2001],c[17][65000],cost[2001][1001],ji,nr,nl,leg[2001][1001],a[17][65000],n,m,i,j,k,l,p,at[2001],viz[2001];
FILE *in,*out;
void def(int k){
int i,j,kk;
a[0][++nr]=++nl;viz[k]=1;c[0][nr]=k;niv[k]=nl;
if(!at[k])
at[k]=nr;
for(i=1;i<=leg[k][0];i++)
if(!viz[(kk=leg[k][i])]){
sm[0][kk]=k;
cc[0][kk]=cost[k][i];
def(kk);
a[0][++nr]=--nl;c[0][nr]=k;
}
}
int main(){
in=fopen("atac.in","rt");
out=fopen("atac.out","wt");
fscanf(in,"%d%d%d",&n,&m,&ppp);
for(i=1;i<n;i++){
fscanf(in,"%d%d",&l,&p);
leg[i+1][++leg[i+1][0]]=l;
leg[l][++leg[l][0]]=i+1;
cost[i+1][leg[i+1][0]]=cost[l][leg[l][0]]=p;
}
nl=nr=0;
def(1);
b[1]=0;
ll=n;
n=nr;
for(i=2;i<=n;i++)
b[i]=b[i>>1]+1;
for(i=1;i<=b[n];i++){
l=n-(1<<i)+1;
for(j=1;j<=l;j++)
if(a[i-1][j]<=a[i-1][(ji=((j*2+(1<<i)-1)>>1)+1)])
a[i][j]=a[i-1][j],c[i][j]=c[i-1][j];
else
a[i][j]=a[i-1][ji],c[i][j]=c[i-1][ji];
for(j=1;j<=ll;j++){
sm[i][j]=sm[i-1][sm[i-1][j]];
if(cc[i-1][sm[i-1][j]]<=cc[i-1][j])
cc[i][j]=cc[i-1][sm[i-1][j]];
else
cc[i][j]=cc[i-1][j];
}
}
mm=ll;
fscanf(in,"%d%d%d%d%d%d",&x,&y,&A,&B,&C,&D);
for(i=1;i<=m;i++){
l=at[x],p=at[y];
if(l>p)
k=l,l=p,p=k;
k=b[p-l+1];
if(a[k][l]<=a[k][(ji=p-(1<<k)+1)])
sc=c[k][l];
else
sc=c[k][ji];
ll=32000;
if(x-sc){
k=b[niv[x]-niv[sc]];
for(pp=niv[x]-niv[sc]-(1<<k),n=x;pp;pp-=b[pp])
n=sm[b[pp]][n];
if(ll>cc[k][x])
ll=cc[k][x];
if(ll>cc[k][n])
ll=cc[k][n];
}
if(y-sc){
k=b[niv[y]-niv[sc]];
for(pp=niv[y]-niv[sc]-(1<<k),n=y;pp;pp-=b[pp])
n=sm[b[pp]][n];
if(ll>cc[k][y])
ll=cc[k][y];
if(ll>cc[k][n])
ll=cc[k][n];
}
if(i>m-ppp)
fprintf(out,"%d\n",ll);
x=(x*A+y*B)%mm+1;
y=(y*C+ll*D)%mm+1;
}
return 0;
}