#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const ll LOG = 31;
const ll MOD = 1000000007;
const ll inf = 1e17;
const ll B = 2305843009213693951;
#define db(x) cerr << #x << " = " << x << " | "
#define dbg(x) cerr << #x << " = " << x << "\n"
#define Algerian ios::sync_with_stdio(0);
#define OI cin.tie(NULL);
ll d(ll src, ll dst, map<ll, vector<pll>>& adj) {
priority_queue<pll, vector<pll>, greater<>> pq;
map<ll, ll> dist;
dist[src] = 0;
pq.push({0, src});
while (pq.size()) {
auto [d, u] = pq.top();
pq.pop();
if (d != dist[u]) continue;
for (auto [v, wt] : adj[u]) {
if (dist.find(v) == dist.end() || (dist[u] + wt < dist[v])) {
dist[v] = dist[u] + wt;
pq.push({dist[v], v});
}
}
}
return dist[dst];
};
int main() {
Algerian OI
ll n, m, q;
cin >> n >> m >> q;
vector<ll> a(m);
map<ll, vector<pll>> adj;
for (ll i = 0; i < m; i++) {
cin >> a[i];
adj[a[i]].push_back({a[i] + n, 1});
adj[a[i] + n].push_back({a[i], 1});
}
auto dist = [&](ll a, ll b) -> ll {
if (a > b) swap(a, b);
return min(b - a, 2 * n - (b - a));
};
// for (ll i = 0; i < m - 1; i++) {
// adj[a[i]].push_back({a[i + 1], dist(a[i], a[i + 1])});
// adj[a[i + 1]].push_back({a[i], dist(a[i], a[i + 1])});
// adj[a[i] + n].push_back({a[i + 1] + n, dist(a[i + 1] + n, a[i] + n)});
// adj[a[i + 1] + n].push_back({a[i] + n, dist(a[i + 1] + n, a[i] + n)});
// }
// adj[a[m - 1]].push_back({a[0] + n, dist(a[m - 1], a[0] + n)});
// adj[a[0] + n].push_back({a[m - 1], dist(a[m - 1], a[0] + n)});
// adj[a[0]].push_back({a[m - 1] + n, dist(a[0], a[m - 1] + n)});
// adj[a[m - 1] + n].push_back({a[0], dist(a[0], a[m - 1] + n)});
// vector<pll> qu(q);
while (q--) {
ll u, v;
cin >> u >> v;
// if (adj.find(u) == adj.end()) {
// auto it = adj.lower_bound(u);
// ll w = it -> first, w2;
// if (it != adj.begin()) w2 = (--it) -> first;
// else w2 = (--adj.end()) -> first;
// adj[u].push_back({w, dist(u, w)});
// adj[w].push_back({u, dist(u, w)});
// adj[w2].push_back({u, dist(u, w2)});
// adj[u].push_back({w2, dist(u, w2)});
// }
// if (adj.find(v) == adj.end()) {
// auto it = adj.lower_bound(v);
// ll w, w2;
// if (it == adj.end()) w = adj.begin() -> first;
// else w = it -> first;
// if (it != adj.begin()) w2 = (--it) -> first;
// else w2 = (--adj.end()) -> first;
// adj[v].push_back({w, dist(v, w)});
// adj[w].push_back({v, dist(v, w)});
// adj[v].push_back({w2, dist(v, w2)});
// adj[w2].push_back({v, dist(v, w2)});
// }
// cout << d(u, v, adj) << "\n";
ll res = dist(u, v);
for (auto k : a) {
ll d = min(dist(u, k) + dist(v, k + n), dist(u, k + n) + dist(v, k)) + 1;
res = min(res, d);
}
cout << res << "\n";
}
return 0;
}