#include<stdio.h>
struct nod{
long v;
long b;
nod *next;
};
nod *vec[32001];
long n,m,p,j,k,i,niv[32001],dad[32001][17],bom[32001][17],aa,bb,cc,dd,xx,yy,zz;
void pune();
void df(long ii, long nn);
void stramosi();
void atac(long o1, long o2, long bo1, long bo2);
int main()
{ freopen("atac.in","rt",stdin); freopen("atac.out","wt",stdout);
scanf("%ld%ld%ld",&n,&m,&p);
for(i=2;i<=n;i++)
{ scanf("%ld%ld",&j,&k);
pune();
}
niv[1]=1;
df(1,1);
stramosi();
scanf("%ld%ld%ld%ld%ld%ld",&xx,&yy,&aa,&bb,&cc,&dd);
for(;m>p;m--)
{ if(xx==yy) zz=0;
else atac(xx,yy,100001,100001);
xx=(xx*aa+yy*bb)%n+1;
yy=(yy*cc+zz*dd)%n+1;
}
for(;m;m--)
{ if(xx==yy) zz=0;
else atac(xx,yy,100001,100001);
printf("%ld\n",zz);
xx=(xx*aa+yy*bb)%n+1;
yy=(yy*cc+zz*dd)%n+1;
}
}
void pune()
{ nod *paux;
paux=new nod;
paux->v=j;
paux->b=k;
paux->next=(vec[i])?vec[i]:0;
vec[i]=paux;
paux=new nod;
paux->v=i;
paux->b=k;
paux->next=(vec[j])?vec[j]:0;
vec[j]=paux;
}
void df(long ii, long nn)
{ nod *paux;
for(paux=vec[ii];paux;paux=paux->next)
if(!niv[paux->v])
{ niv[paux->v]=nn+1;
dad[paux->v][0]=ii;
bom[paux->v][0]=paux->b;
df(paux->v,nn+1);
}
}
void stramosi()
{ long lc,lnc,coada[32001],b1,b2,t1,t2;
lc=n-1;
for(i=1;i<=lc;i++) coada[i]=i+1;
lnc=0;
for(i=1;lc;i++)
{ for(j=1;j<=lc;j++)
{ k=coada[j];
t1=dad[k][i-1]; t2=dad[t1][i-1];
if(t2)
{ dad[k][i]=t2;
coada[++lnc]=k;
b1=bom[k][i-1];
b2=bom[t1][i-1];
bom[k][i]=(b1<b2)?b1:b2;
}
}
lc=lnc;
lnc=0;
}
}
void atac(long o1, long o2, long bo1, long bo2)
{
}