#include<bits/stdc++.h>
#define int unsigned int
#define maxn 110
using namespace std;
inline int read(){
register int x=0;
char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x;
}
inline void write(int x){
if(x<0){
putchar('-');
write(-x);
return;
}
if(x>=10)write(x/10);
putchar(x%10+'0');
return;
}
struct jarvis{
int hang,lie,blo[maxn][maxn];
}mp,f[40];
int n,m,q,ask[maxn],mmax;
jarvis operator *(const jarvis insigne,const jarvis andy){
jarvis bob;bob.hang=insigne.hang;bob.lie=andy.lie;
for(register int i=1;i<=insigne.hang;++i){
for(register int j=1;j<=andy.lie;++j){
bob.blo[i][j]=0;
for(register int k=1;k<=insigne.lie;++k){
bob.blo[i][j]^=insigne.blo[i][k]*andy.blo[k][j];
}
}
}
return bob;
}
jarvis operator +(const jarvis insigne,const jarvis andy){
jarvis bob;
bob.hang=insigne.hang;bob.lie=insigne.lie;
for(int i=1;i<=insigne.hang;++i)
for(int j=1;j<=insigne.lie;++j)
bob.blo[i][j]^=insigne.blo[i][j]+andy.blo[i][j];
return bob;
}
void init(jarvis z){
f[1]=z;
int ccc=1,ioi=2;
while(ccc<=mmax){
z=z*z;
f[ioi]=z;
ccc*=2;
ioi++;
}
return;
}
jarvis jarvis_pow(jarvis gyh,int zz){
jarvis sign;
sign.hang=sign.lie=n;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
sign.blo[i][j]=0;
int flag=1;
while(zz){
if(zz&1)sign=sign+f[flag];
zz/=2;
flag++;
}
return sign;
}
signed main(){
n=read();m=read();q=read();
jarvis dream;
dream.hang=n;dream.lie=1;
mp.hang=mp.lie=n;
for(register int i=1;i<=n;++i)dream.blo[i][1]=read();
for(register int i=1;i<=m;++i){
int u=read(),v=read();
mp.blo[u][v]=1;
mp.blo[v][u]=1;
}
for(register int i=1;i<=q;++i){ask[i]=read();mmax=max(mmax,ask[i]);}
mmax++;
int aaa=0;
while(mmax){aaa++;mmax/=2;}
mmax=aaa;
init(mp);
for(register int i=1;i<=q;++i){
jarvis ANS=jarvis_pow(mp,ask[i]);
register int Ans=0;
for(register int ii=1;ii<=n;++ii){
if(ANS.blo[ii][1])Ans^=dream.blo[ii][1];
}
write(Ans);
putchar('\n');
}
return 0;
}