use std::{ cmp::min, io::{read_to_string, stdin, stdout, Write}, }; fn main() { let temp = read_to_string(stdin()).unwrap(); let mut iter = temp .split_ascii_whitespace() .map(|x| x.parse::().unwrap()); let (n, m, q) = ( iter.next().unwrap(), iter.next().unwrap(), iter.next().unwrap(), ); let mut lock = stdout().lock(); let mut bfs = (0..m).map(|_| iter.next().unwrap()).collect::>(); bfs.sort(); let dist = |a: usize, b: usize| -> usize { let d = if a > b { a - b } else { b - a }; min(d, 2 * n - d) }; for _ in 0..q { let (mut x, mut y) = (iter.next().unwrap(), iter.next().unwrap()); if x > y { (x, y) = (y, x); } let delta = y - x; let mut r = min(delta, 2 * n - delta); let (px, py) = (x % n, y % n); let ix = bfs.partition_point(|&k| k < px); let iy = bfs.partition_point(|&k| k < py); let cands = [(ix + m - 1) % m, ix % m, (iy + m - 1) % m, iy % m]; for &cand in &cands { let k = bfs[cand]; let u = k; let v = k + n; let d1 = dist(x, u) + dist(v, y) + 1; let d2 = dist(x, v) + dist(u, y) + 1; r = min(r, d1); r = min(r, d2); } writeln!(lock, "{}", r).unwrap(); } }