#include <bits/stdc++.h>
#define int long long
#define mid ((l + r) >> 1)
using namespace std;
const long long N = 300005;
int n, m, q, x, y, l, r;
vector <int> f[N];
vector <int> t[N];
vector <int> le;
void del(vector <int> &vec, int b)
{
vec.erase(vec.begin() + b);
return;
}
void add(vector <int> &vec, int b, int c)
{
vec.insert(vec.begin() + c, b);
}
signed main()
{
cin >> n >> m >> q;
for (int i = n; i <= n * m; i += n)
le.push_back(i);
while(q--)
{
scanf("%lld%lld", &x, &y);
if (y == m)
{
printf("%lld\n", le[x - 1]);
le.push_back(le[x - 1]);
del(le, x - 1);
}
else if (f[x].size() + y < m)
{
if (t[x].size() == 0)
{
printf("%lld\n", (x - 1) * m + y);
add(t[x], (x - 1) * m + y, upper_bound(t[x].begin(), t[x].end(), (x - 1) * m + y) - t[x].begin());
f[x].push_back(le[x - 1]);
del(le, x - 1);
le.push_back((x - 1) * m + y);
}
else
{
l = y;
r = m - 1 - f[x].size();
while(l < r)
{
if (upper_bound(t[x].begin(), t[x].end(), (x - 1) * m + l) - t[x].begin() - 1 >= y)
r = mid;
else
l = mid + 1;
}
printf("%lld\n", (x - 1) * m + l);
add(t[x], (x - 1) * m + l, upper_bound(t[x].begin(), t[x].end(), (x - 1) * m + l) - t[x].begin());
f[x].push_back(le[x - 1]);
del(le, x - 1);
le.push_back((x - 1) * m + l);
}
}
else
{
printf("%lld\n", f[x][y - (m - f[x].size() - 1) - 1]);
del(f[x], y - (m - f[x].size() - 1) - 1);
f[x].push_back(le[x - 1]);
del(le, x - 1);
le.push_back((x - 1) * m + y);
}
}
}