#include<cstdio>
#include<vector>
using namespace std;
#define N 32001
#define OO 1<<30
#define minn(a,b) ((a<b)?(a):(b))
vector<int>gr(N),c(N),dist(N,0);
int n,m,k,z,a,b,c1,d,x,y;
void df(int x)
{
if (gr[x]==x)
{
dist[x]=1;
return;
}
df(gr[x]);
dist[x]=1+dist[gr[x]];
}
void solve(int x,int y)
{
z=OO;
if (dist[x]<dist[y])
swap(x,y);
while (dist[x]>dist[y])
{
z=minn(z,c[x]);
x=gr[x];
}
while (x!=y)
{
z=minn(z,c[x]);
z=minn(z,c[y]);
x=gr[x];
y=gr[y];
}
}
void citire()
{
freopen("atac.in","r",stdin);
freopen("atac.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for (int i=2; i<=n; ++i)
scanf("%d%d",&gr[i],&c[i]);
for (int i=1; i<=n; ++i)
if (!dist[i])
df(i);
scanf("%d%d%d%d%d%d",&x,&y,&a,&b,&c1,&d);
solve(x,y);
for (int i=1; i<=m; ++i)
{
x=(x*a+y*b)%n+1;
y=(y*c1+z*d)%n+1;
solve(x,y);
if (m-k+1<=i)
printf("%d\n",z);
}
}
int main()
{
citire();
return 0;
}