#include <iostream>
#include <bitset>
#include <vector>
using namespace std;
#define maxN 100001
bitset<maxN> tornyok = 0b0;//A tornyok alapveto allapota, semmi sincs bekapcsolva
int megelozesek[maxN];//Ha i-t megelozi j, akkor megelozesek[i]=j
bitset<maxN> masks[maxN];//A maszkok
//Ha az i vilagitorony jelet kuld, akkor atkapcsol minden masks[i]-ben levo torony
//Ezt egy xor-al lehet modellezni
bitset<maxN> temp_allapot;
vector<int> solutions;//Megoldasok
void solve(int n, int k) {
int a;
for (int i = 1; i <= n; i++)
{
cin >> a;
temp_allapot[i]=a;
}
for (int i = 0; i < k; i++)
{//tesztek
for (int i = 2; i <= n; i++)
{
//Ha amit nezunk fel van kapcsolva
if (temp_allapot[i]) {
//Akkor atkapcsolja az osszes olyan tornyot, ami alatta van
temp_allapot ^= masks[i];
}
}
}
solutions.push_back(temp_allapot[1]);//Lementjuk az 1-es villanytorony allapotat
}
void generate_masks(int n) {
//Legeneralja egy-egy toronyra az osszes tornyot,
//amit at kell kapcsolni, ha azt aktivaljuk
bitset<maxN> temp_mask;
for (int i = 2; i <= n; i++)
{
temp_mask = 0b0;//alapbol semmit se ertesit
temp_mask[megelozesek[i]] = 1;//Amit o ertesit, azt bekapcsoljuk
temp_mask |= masks[megelozesek[i]];//Aztan mindent ertesit, amit az ot megelozo is
masks[i] = temp_mask;
}
}
int main()
{
int n, k, q;
cin >> n>>k>>q;
if (maxN < n) {
cout << "maxN tul kicsi!";
return 0;
}
for (int i = 2; i <= n; i++)
{
cin >> megelozesek[i];
}
generate_masks(n);
for (int i = 0; i < q; i++)
{
//Ellenorzesek
solve(n, k);
}
for (int e : solutions) {
cout << e << endl;
}
}