type pe=^e;
e=record
who,cost:longint;
next:pe;
end;
var f:text;
interv,miin,a1,b1,c1,d1,p:word;
c:array[0..18] of longint;
n,m,i,j,x,y,k,miinv,x2:longint;
a:array[1..32000] of pe;
level:array[1..64000] of word;
minim:array[1..64000] of longint;
minv:array[1..64000,0..16] of longint;
min:array[1..64000,0..16] of word;
poz:array[1..32000] of word;
boss:array[1..32000] of byte;
h:pe;
procedure go(s,l:word;var j:longint);
var me:pe;
begin
inc(j);
boss[s]:=1;
poz[s]:=j;
level[j]:=l;
me:=a[s]^.next;
if me=nil then
else while me<>nil do begin
if boss[me^.who]<>1 then
begin
minim[j]:=me^.cost;
go(me^.who,l+1,j);
inc(j);
level[j]:=l;
minim[j-1]:=me^.cost;
end;
me:=me^.next;
end;
end;
begin
assign(f,'atac.in');
reset(f);
read(f,n,m,p);
for i:=1 to n do begin
new(a[i]);
a[i]^.next:=nil;
end;
for i:=1 to n-1 do
begin
readln(f,x,y);
new(h);
h^.who:=x;
h^.cost:=y;
h^.next:=a[i+1]^.next;
a[i+1]^.next:=h;
new(h);
h^.who:=i+1;
h^.cost:=y;
h^.next:=a[x]^.next;
a[x]^.next:=h;
end;
readln(f,x,y,a1,b1,c1,d1);
close(f);
go(1,1,j);
j:=0;
c[0]:=1;
while c[j]<2*n do
begin
inc(j);
c[j]:=c[j-1]*2;
end;
k:=j-1;
for i:=1 to 2*n-1 do begin
min[i,0]:=level[i];
minv[i,0]:=minim[i];
end;
for j:=1 to k do
for i:=1 to 2*n-1 do
begin
if (min[i,j-1]<min[i+c[j-1],j-1])
or (min[i+c[j-1],j-1]=0) then
begin
min[i,j]:=min[i,j-1];
minv[i,j]:=minv[i,j-1];
end
else begin
min[i,j]:=min[i+c[j-1],j-1];
minv[i,j]:=minv[i+c[j-1],j-1];
end;
end;
for i:=1 to m-p do
begin
if x=y then begin
x:=(x*a1+y*b1) mod n+1;
y:=(x*c1) mod n+1;
end
else begin
k:=1;
interv:=abs(poz[x]-poz[y])+1;
while c[k]<interv do inc(k);
if poz[x]>poz[y] then x2:=poz[y]
else x2:=poz[x];
miin:=min[x2,0];
miinv:=minv[x2,0];
while interv<>0 do
begin
k:=0;
while c[k]<=interv do inc(k);
dec(k);
if minv[x2,k]<miinv then
begin
miin:=min[x2,k];
miinv:=minv[x2,k];
end;
x2:=x2+c[k];
interv:=interv-c[k];
end;
x:=(x*a1+y*b1) mod n+1;
y:=(x*c1+miinv*d1) mod n+1;
end;
end;
assign(f,'atac.out');
rewrite(f);
for i:=1 to p do
begin
if x=y then begin
x:=(x*a1+y*b1) mod n+1;
y:=(x*c1) mod n+1;
writeln(f,0);
end
else begin
k:=1;
interv:=abs(poz[x]-poz[y])+1;
while c[k]<interv do inc(k);
if poz[x]>poz[y] then x2:=poz[y]
else x2:=poz[x];
miin:=min[x2,0];
miinv:=minv[x2,0];
while interv<>0 do
begin
k:=0;
while c[k]<=interv do inc(k);
dec(k);
if min[x2,k]<miin then
begin
miin:=min[x2,k];
miinv:=minv[x2,k];
end;
x2:=x2+c[k];
interv:=interv-c[k];
end;
x:=(x*a1+y*b1) mod n+1;
y:=(x*c1+miinv*d1) mod n+1;
writeln(f,miinv);
end;
end;
close(f);
end.