#include <bits/stdc++.h>
using namespace std;
int bfs(int start, int end, int n, set<pair<int, int>>& frens){
queue<int> q;
vector<bool> seen(n * 2);
vector<int> dists(n * 2, INT_MAX);
q.push(start);
dists[start] = 0;
while(!q.empty()){
int node = q.front();
q.pop();
if(seen[node]) continue;
// cout << "current node: " << node << "\n";
seen[node] = true;
// add direct neighbours
if(node == 0){
q.push(1);
q.push(2*n -1);
dists[1] = min(dists[node] + 1, dists[1]);
dists[2*n -1] = min(dists[node] + 1, dists[2*n - 1]);
}
else if(node == 2*n -1){
q.push(0);
q.push(node - 1);
dists[node - 1] = min(dists[node] + 1, dists[node - 1]);
dists[0] = min(dists[0], dists[node] + 1);
}
else{
q.push(node + 1);
q.push(node - 1);
dists[node - 1] = min(dists[node -1], dists[node] + 1);
dists[node + 1] = min(dists[node + 1], dists[node] + 1);
}
// check if they have a friend
if(frens.find({node, node + n}) != frens.end()){
// cout << "found friend at " << node + n << "\n";
q.push(node + n);
dists[node + n] = min(dists[node + n], dists[node] + 1);
}
if(frens.find({node - n, node}) != frens.end()){
// cout << "found friend at " << node - n << "\n";
q.push(node - n);
dists[node - n] = min(dists[node - n], dists[node] + 1);
}
}
return dists[end];
}
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
int ppl, f, qs;
cin >> ppl >> f >> qs;
set<pair<int, int>> frens;
for(int i = 0; i < f; i++){
int pers;
cin >> pers;
frens.insert({pers, pers + ppl});
}
for(int i = 0; i < qs; i++){
int a, b;
cin >> a >> b;
cout << bfs(a, b, ppl, frens) << "\n";
}
}