#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<vector<ll>> v;
vector<ll> r;
vector<vector<pair<ll, bool>>> h;
ll t = 0;
void DFS(ll y){
h[r[y]].push_back({t, true});
t++;
for(ll z : v[y]){
DFS(z);
}
h[r[y]].push_back({t, false});
t++;
}
int main() {
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
ll N, R, Q;
cin>>N>>R>>Q;
v.resize(N);
r.resize(N);
h.resize(R);
cin>>r[0];
r[0]--;
for(ll i=1;i<N;i++){
ll S;
cin>>S>>r[i];
S--; r[i]--;
v[S].push_back(i);
}
DFS(0);
/*for(ll i=0;i<R;i++){
for(pair<ll, ll> x : h[i]){
cout<<x.first<<" ";
}
cout<<endl;
}*/
while(Q--){
ll r1, r2;
cin>>r1>>r2;
r1--; r2--;
ll p1, p2, c, ans;
p1 = p2 = c = ans = 0;
while(!(p1 == h[r1].size() and p2 == h[r2].size())){
bool b = true;
if(p1 == h[r1].size()){b = false;}
else{
if(p2 != h[r2].size() and h[r1][p1] > h[r2][p2]){b = false;}
}
if(b){
if(h[r1][p1].second){c++;}
else{c--;}
p1++;
} else {
ans += c;
p2++;
}
}
cout<<ans/2<<endl;
}
}