#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=1e6+5;
ll n,q,s;
ll fa[N];
ll x,k,ans[N];
ll f[N][20];
ll deep[N];
vector<ll> edge[N];
ll lowbit(ll x){return x&-x;}
inline unsigned int get(unsigned int x)
{
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
return s = x;
}
void dfs(ll rt,ll fa)
{
deep[rt]=deep[fa]+1;
for(auto i:edge[rt])
dfs(i,rt);
return;
}
ll root;
signed main()
{
freopen("P5903.in","r",stdin);
freopen("P5913.out","w",stdout);
cin>>n>>q>>s;
for(ll i=1;i<=n;i++)
{
cin>>fa[i];
if(!fa[i])
{
root=i;
continue;
}
edge[fa[i]].push_back(i);
}
for(ll i=1;i<=n;i++) f[i][0]=fa[i];
for(ll len=1;len<=19;len++)
for(ll i=1;i<=n;i++)
f[i][len]=f[f[i][len-1]][len-1];
dfs(root,0);
for(ll i=1;i<=q;i++)
{
x=((get(s)^ans[i-1])%n)+1;
k=(get(s)^ans[i-1])%deep[x];
for(ll j=19;j>=0;j--)
{
if((1<<j)<=k)
{
x=f[x][j];
k-=(1<<j);
}
}
ans[i]=x;
}
for(ll i=2;i<=q;i++)
ans[1]^=(i*ans[i]);
cout<<ans[1]<<'\n';
return 0;
}