#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define nmax 65010
#define inf 0x3f3f3f3f
#define pii pair<int, int>
vector<pii> G[nmax];
vector<int> Euler;
int N, M, P, X, Y, A, B, C, D, Xprim, Yprim, K = 1;
int F[20][nmax], Min[20][nmax], RMQ[nmax][30];
int First[nmax], L[nmax];
void DFS(int node, int father, int level, int cost)
{
L[node] = level;
Min[0][node] = cost;
F[0][node] = father;
First[node] = Euler.size();
Euler.pb(node);
for(vector<pii> :: iterator it = G[node].begin(); it != G[node].end(); ++it)
{
if(it -> f == father) continue;
DFS(it -> f, node, level + 1, it -> s);
Euler.pb(node);
}
}
void Ancestors()
{
int i, j;
Min[0][1] = inf;
for(i = 1; (1 << i) <= N; i++)
for(j = 1; j <= N; j++)
{
int from = F[i - 1][j];
Min[i][j] = min(Min[i - 1][j], Min[i - 1][from]);
F[i][j] = F[i - 1][from];
}
}
void Rmq()
{
int i, j;
for(i = 1; i < Euler.size(); i++) RMQ[i][0] = Euler[i];
for(j = 1; (1 << j) <= Euler.size(); j++)
for(i = 1; i + (1 << j) < Euler.size(); i++)
if(L[ RMQ[i][j - 1] ] <= L[ RMQ[i + (1 << (j - 1))][j - 1] ])
RMQ[i][j] = RMQ[i][j - 1];
else
RMQ[i][j] = RMQ[i + (1 << (j - 1))][j - 1];
}
int LCA(int X, int Y)
{
int i = First[X], j = First[Y], k;
if(i > j) i ^= j ^= i ^= j;
k = (int)log2(j - i + 1);
if(L[ RMQ[i][k] ] < L[ RMQ[j - (1 << k) + 1][k] ]) return RMQ[i][k];
else return RMQ[j - (1 << k) + 1][k];
}
int Query(int A, int B)
{
if(A == B) return inf;
int now = L[A] - L[B], crtAns = inf, i;
for(i = 0; i < 16; i++)
if(now & (1 << i))
crtAns = min(crtAns, Min[i][A]), A = F[i][A];
return crtAns;
}
int main()
{
freopen("atac.in", "r", stdin);
freopen("atac.out", "w", stdout);
int i, j;
scanf("%i %i %i", &N, &M, &P);
for(i = 2; i <= N; i++)
{
scanf("%i %i", &X, &Y);
G[i].pb(mp(X, Y));
G[X].pb(mp(i, Y));
}
scanf("%i %i %i %i %i %i", &X, &Y, &A, &B, &C, &D);
Euler.pb(0);
DFS(1, 0, 1, 0);
Rmq();
Ancestors();
while(M --)
{
int ans = 0, lca;
if(X != Y)
{
lca = LCA(X, Y);
ans = min(Query(X, lca), Query(Y, lca));
}
if(M < P) printf("%i\n", ans);
Xprim = (A * X + B * Y) % N + 1;
Yprim = (C * Y + D * ans) % N + 1;
X = Xprim; Y = Yprim;
}
return 0;
}