#include <bits/stdc++.h> 
 
#define x first 
#define y second 
 
#define siz(v) ((int)(v).size()) 
#define all(v) begin((v)), end(v) 
#define filter(v) sort(all(v)); v.resize(unique(all(v)) - begin(v)) 
 
#define BIT(x, i) (((x) >> (i)) & 1) 
#define MASK(i) (1LL << (i)) 
 
#define dbg(x) "[" #x " = " << x << "]" 
 
using namespace std; 
 
typedef pair<int, int > ii; 
typedef pair<long long, int > lli; 
 
bool M1; 
const int infINT = 1e9 + 123; 
const long long inf = 1e18 + 12; 
const int mod = 1000000007; 
 
const int dx[4] = {-1, 0, 0, 1}; 
const int dy[4] = {0, -1, 1, 0}; 
 
template<class X, class Y> bool minimize(X &x, const Y &y){return x > y ? x = y, 1: 0;} 
template<class X, class Y> bool maximize(X &x, const Y &y){return x < y ? x = y, 1: 0;} 
 
void add(int &a, const int &b){ 
    a += b; 
    if (a >= mod) a -= mod; 
} 
 
int bin_pow(int a, int k){ 
    int res = 1; 
    while(k){ 
        if (k & 1) res = 1LL * res * 1LL * a % mod; 
        k >>= 1; a = 1LL * a * 1LL * a % mod; 
    } 
    return res; 
} 
 
const int MAXK = 2e5 + 5; 
 
long long X, Y, numTree, res[MAXK]; 
pair<long long, long long> tree[MAXK]; 
vector<int > pos; 
vector<long long > comp; 
 
struct segmentTree{ 
    int n; 
    vector<long long > mx; 
 
    segmentTree(int _n = 0): n(_n){ 
        mx.assign(n << 2 | 1, 0); 
    } 
 
    void update(int id, int l, int r, int u, int v, long long x){ 
        if (l > r || l > v || r < u || u > v) return; 
        if (l >= u && r <= v) return mx[id] = max(mx[id], x), void(); 
        int m = (l + r) >> 1; 
        update(id << 1, l, m, u, v, x); 
        update(id << 1 | 1, m + 1, r, u, v, x); 
    } 
 
    void update(int u, int v, long long x){ 
        update(1, 1, n, u, v, x); 
    } 
 
    long long get(int id, int l, int r, int p){ 
        if (l == r) return mx[id]; 
        int m = (l + r) >> 1; 
        if (p <= m) return max(mx[id], get(id << 1, l, m, p)); 
        else return max(mx[id], get(id << 1 | 1, m + 1, r, p)); 
    } 
 
    long long get(int p){ 
        return get(1, 1, n, p); 
    } 
}; 
 
void input(){ 
    cin >> X >> Y >> numTree; 
 
    for(int i = 1; i <= numTree; i++){ 
        double x, y; cin >> x >> y; 
        tree[i].x = round(x * 2); 
        tree[i].y = round(y * 2); 
        comp.push_back(tree[i].y); 
        pos.push_back(i); 
    } 
} 
 
long long getPos(const long long &pos) { 
    return lower_bound(all(comp), pos) - begin(comp) + 1; 
} 
 
bool cmp(const int &a, const int &b){ 
    return tree[a] < tree[b]; 
} 
 
void solve(){ 
    filter(comp); 
    sort(all(pos), cmp); 
 
    segmentTree it(siz(comp)); 
 
    for(int i: pos) { 
        long long len = tree[i].x - it.get(getPos(tree[i].y)); 
        int L = lower_bound(all(comp), tree[i].y - len) - begin(comp) + 1; 
        int R = upper_bound(all(comp), tree[i].y + len) - begin(comp); 
        res[i] = len; 
        it.update(L, R, tree[i].x + len); 
    } 
 
    for(int i = 1; i <= numTree; i++) 
        cout << res[i] << '\n'; 
} 
 
bool M2; 
int main(){ 
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 
    #define task "test" 
    if (fopen(task".inp", "r")){ 
        freopen(task".inp", "r", stdin); 
        freopen(task".out", "w", stdout); 
    } 
    int t = 1; 
//    cin >> t; 
    while(t--){ 
        input(); 
        solve(); 
    } 
    cerr << (1.0  * clock()) / CLOCKS_PER_SEC << ".s\n"; 
    cerr << (&M2 - &M1) / 1048576 << " mb\n"; 
} 

