#include <fstream>
#include <cmath>
#include <queue>
#include <cstdlib>
#include <map>
#include <iomanip>
#include <vector>
#define INF 100010
#define ushort unsigned short
using namespace std;
ifstream cin("atac.in");
ofstream cout("atac.out");
queue <int> ex,ex1;
vector <pair<ushort,int> > L[32010];
vector <ushort> eul;
vector <ushort> mn[20];
map <ushort, int> dest[32010];
map <ushort, int> :: iterator it,it1;
bool viz[32100];
ushort pmin[33000], cntmn;
int N,M,P,nn,dmin;
inline void dfs(ushort x);
inline void rmq();
inline void weirdfs(ushort x);
int answer(int x,int y);
int main()
{
int xp,yp, Z,x,y,a,b,c,d,u,v,lg,p2;
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M>>P;
for(int i=2; i<=N; ++i)
{
cin>>u>>v;
L[i].push_back({u,v});
L[u].push_back({i,v});
}
cin>>x>>y>>a>>b>>c>>d;
///
eul.push_back(0);
dfs(1);
rmq();
///
for(int i=1; i<=N; ++i)
viz[i]=0;
dest[1].insert({1,INF});
weirdfs(1);
///
for(int i=1, j=M; i<=M; j--, ++i)
{
Z=answer(x,y);
if(j<=P) cout<<Z<<'\n';
xp=(x*a+y*b)%N+1;
yp=(y*c+Z*d)%N+1;
x=xp; y=yp;
}
return 0;
}
inline void dfs(ushort x)
{
ex.push(x);
while(!ex.empty())
{
x=ex.front(); ex.pop();
eul.push_back(x);
if(!pmin[x])
pmin[x]=eul.size()-1, ++cntmn;
if(cntmn==N)
return;
viz[x]=1;
for(auto nod : L[x])
if(!viz[nod.first])
{
ex.push(nod.first);
eul.push_back(x);
}
}
}
void rmq()
{
for(int p=1, i=0; p<eul.size(); ++i, p*=2)
for(int ind=1; ind<eul.size()-p+1; ++ind)
mn[i].push_back(0);
for(int i=1; i<eul.size(); ++i)
mn[0][i]=eul[i];
for(int p=2, i=1; p<eul.size(); ++i, p*=2)
for(int ind=1; ind<eul.size()-p+1; ++ind)
mn[i][ind]=min(mn[i-1][ind], mn[i-1][ind+p/2]);;
}
inline void weirdfs(ushort x)
{
ex1.push(x);
while(!ex1.empty())
{
x=ex1.front(); ex1.pop();
viz[x]=1;
for(auto nod : L[x])
if(!viz[nod.first])
{
for(auto pp: dest[x]) {
nn=pp.first;
dmin=min(pp.second,nod.second);
dest[nod.first].insert({nn,dmin});
}
dest[nod.first].insert({x,nod.second});
ex1.push(nod.first);
}
}
}
inline int answer(int x,int y)
{
if(x==y) return 0;
int ax,ay,lca,lg,p2,Z;
ax=pmin[x];
ay=pmin[y];
if(ax>ay) swap(ax,ay);
lg=ay-ax+1;
p2=log2(lg);
lca=min(mn[p2][ax],mn[p2][ay-(1<<p2)+1]);
///
it=dest[x].find(lca);
it1=dest[y].find(lca);
Z=min(it->second, it1->second);
return Z;
}