#include <stdio.h>
#include <stdlib.h>
#define N 32001
#define INF 2000000000
int *a[N],n,m,m2,L[3*N],T[3*N],P[N][20],C[N][20];
int c[N],*b[N];
void level(int x,int l,int t){
for(int i=1;i<=a[x][0];i++)
if(a[x][i]!=t){
T[a[x][i]]=x;
L[a[x][i]]=l+1;
c[a[x][i]]=b[x][i];
level(a[x][i],l+1,x);
}
}
inline int min(int x,int y){
if(x>y) return y;
return x;
}
void precalc(){
int i,j;
L[1]=1; level(1,1,-1);
for(i=1;i<=n;i++)
for(j=1;1<<j <=n;j++)
P[i][j]=-1,C[i][j]=-1;
for(i=1;i<=n;i++)
P[i][0]=T[i],C[i][0]=c[i];
for(j=1;1<<j <=n;j++)
for(i=2;i<=n;i++){
P[i][j]=P[P[i][j-1]][j-1];
C[i][j]=min(C[i][j-1],C[P[i][j-1]][j-1]);
}
}
int RMQ(int p, int q){
int log,i,cost=INF;
if(L[p]<L[q]){
int tmp=p;p=q;q=tmp;
}
for(log=1;1<<log<=L[p];log++); log--;
for(i=log;i>=0;i--)
if(L[p] - (1<<i) >=L[q]){
cost=min(cost,C[p][i]);
p=P[p][i];
}
if(p==q)
return cost;
for(i=log;i>=0;i--)
if(P[p][i]!=-1 && P[p][i]!=P[q][i]){
cost=min(cost,min(C[p][i],C[q][i]));
p=P[p][i];q=P[q][i];
}
return min(cost,min(C[p][0],C[q][0]));
}
int main(){
int i,u,v,A,B,C,D,X,Y,Y2,X2,z;
freopen("atac.in","r",stdin);
freopen("atac.out","w",stdout);
scanf("%d%d%d",&n,&m,&m2);
for(i=1;i<=n;i++){
a[i]=(int*)malloc(4);a[i][0]=0;
b[i]=(int*)malloc(4);
}
for(i=2;i<=n;i++){
scanf("%d%d",&u,&v);
a[u][0]++;a[i][0]++;
a[u]=(int*)realloc(a[u],(a[u][0]+1)*4);a[i]=(int*)realloc(a[i],(a[i][0]+1)*4);
b[u]=(int*)realloc(b[u],(a[u][0]+1)*4);b[i]=(int*)realloc(b[i],(a[i][0]+1)*4);
a[u][a[u][0]]=i;a[i][a[i][0]]=u; b[u][a[u][0]]=v; b[i][a[i][0]]=v;
//c[i]=v;
}
c[1]=INF;
precalc();
scanf("%d%d%d%d%d%d",&X,&Y,&A,&B,&C,&D);
if(X!=Y) z=RMQ(X,Y);
else z=0;
if(m==m2) printf("%d\n",z);
for(i=2;i<=m;i++){
X2=(X*A+Y*B)%n +1;
Y2=(Y*C+z*D)%n +1;
if(X2!=Y2) z=RMQ(X2,Y2);
else z=0;
if(i>=m-m2+1)
printf("%d\n",z);
X=X2;Y=Y2;
}
return 0;
}