#include <algorithm>
#include <iostream>
#include <cassert>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define type(x) __typeof((x).begin())
#define foreach(i, x) for(type(x) i = (x).begin(); i != (x).end(); i++)
typedef long long ll;
typedef pair < int, int > ii;
const int inf = 1e9 + 333;
const ll linf = 1e18 + 333;
const int N = 1e5 + 5;
const int LOG = 18;
int n, m, b[N], t[LOG][N], last[N << 2], avl[N << 2];
ii a[N];
void init(int x, int l, int r, int dep = 0) {
if(l == r) {
t[dep][l] = a[l].first;
return;
}
int m = l + r >> 1;
init(x + x, l, m, dep + 1);
init(x + x + 1, m + 1, r, dep + 1);
merge(t[dep + 1] + l, t[dep + 1] + m + 1, t[dep + 1] + m + 1, t[dep + 1] + r + 1, t[dep] + l);
}
void doit(int x, int l, int r, int a, int b, int dep) {
if(b > a) {
avl[x] += upper_bound(t[dep] + l, t[dep] + r + 1, b) - upper_bound(t[dep] + l, t[dep] + r + 1, a);
last[x] = b;
}
}
void push(int x, int l, int r, int dep) {
int m = l + r >> 1;
doit(x + x, l, m, last[x + x], last[x], dep + 1);
doit(x + x + 1, m + 1, r, last[x + x + 1], last[x], dep + 1);
}
int query_update(int x, int l, int r, int x1, int x2, int k, int rem, int dep = 0) {
doit(x, l, r, last[x], k, dep);
push(x, l, r, dep);
if(x2 < l or r < x1)
return 0;
if(x1 <= l and r <= x2 and avl[x] <= rem) {
int res = avl[x];
avl[x] = 0;
return res;
}
int m = l + r >> 1;
int res = query_update(x + x, l, m, x1, x2, k, rem, dep + 1);
assert(res <= rem);
if(res == rem) {
avl[x] = avl[x + x] + avl[x + x + 1];
return res;
}
res += query_update(x + x + 1, m + 1, r, x1, x2, k, rem - res, dep + 1);
avl[x] = avl[x + x] + avl[x + x + 1];
return res;
}
int main () {
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d %d", &a[i].second, &a[i].first);
sort(a + 1, a + n + 1);
for(int i = 1; i <= n; i++)
swap(a[i].first, a[i].second);
init(1, 1, n);
scanf("%d", &m);
for(int i = 1; i <= m; i++)
scanf("%d", b + i);
sort(b + 1, b + m + 1);
for(int i = 1; i <= n; i++)
printf("%d %d\n", a[i].first, a[i].second);
int j = 1;
for(int i = 1; i <= m; i++) {
while(j <= n and a[j].second < b[i])
j++;
if(j > n) {
puts("FAIL");
return 0;
}
int ans = query_update(1, 1, n, j, n, b[i], b[i]);
printf("j = %d ans = %d\n", j, ans);
if(ans < b[i]) {
printf("FAIL --> b[%d] = %d", i, b[i]);
return 0;
}
}
puts("OK");
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHR5cGUoeCkgX190eXBlb2YoKHgpLmJlZ2luKCkpCiNkZWZpbmUgZm9yZWFjaChpLCB4KSBmb3IodHlwZSh4KSBpID0gKHgpLmJlZ2luKCk7IGkgIT0gKHgpLmVuZCgpOyBpKyspCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBwYWlyIDwgaW50LCBpbnQgPiBpaTsKCmNvbnN0IGludCBpbmYgPSAxZTkgKyAzMzM7CmNvbnN0IGxsIGxpbmYgPSAxZTE4ICsgMzMzOwoKY29uc3QgaW50IE4gPSAxZTUgKyA1Owpjb25zdCBpbnQgTE9HID0gMTg7CgppbnQgbiwgbSwgYltOXSwgdFtMT0ddW05dLCBsYXN0W04gPDwgMl0sIGF2bFtOIDw8IDJdOwppaSBhW05dOwoKdm9pZCBpbml0KGludCB4LCBpbnQgbCwgaW50IHIsIGludCBkZXAgPSAwKSB7CiAgICBpZihsID09IHIpIHsKICAgICAgICB0W2RlcF1bbF0gPSBhW2xdLmZpcnN0OwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgIGluaXQoeCArIHgsIGwsIG0sIGRlcCArIDEpOwogICAgaW5pdCh4ICsgeCArIDEsIG0gKyAxLCByLCBkZXAgKyAxKTsKICAgIG1lcmdlKHRbZGVwICsgMV0gKyBsLCB0W2RlcCArIDFdICsgbSArIDEsIHRbZGVwICsgMV0gKyBtICsgMSwgdFtkZXAgKyAxXSArIHIgKyAxLCB0W2RlcF0gKyBsKTsKfQoKdm9pZCBkb2l0KGludCB4LCBpbnQgbCwgaW50IHIsIGludCBhLCBpbnQgYiwgaW50IGRlcCkgewogICAgaWYoYiA+IGEpIHsKICAgICAgICBhdmxbeF0gKz0gdXBwZXJfYm91bmQodFtkZXBdICsgbCwgdFtkZXBdICsgciArIDEsIGIpIC0gdXBwZXJfYm91bmQodFtkZXBdICsgbCwgdFtkZXBdICsgciArIDEsIGEpOwogICAgICAgIGxhc3RbeF0gPSBiOwogICAgfQp9Cgp2b2lkIHB1c2goaW50IHgsIGludCBsLCBpbnQgciwgaW50IGRlcCkgewogICAgaW50IG0gPSBsICsgciA+PiAxOwogICAgZG9pdCh4ICsgeCwgbCwgbSwgbGFzdFt4ICsgeF0sIGxhc3RbeF0sIGRlcCArIDEpOwogICAgZG9pdCh4ICsgeCArIDEsIG0gKyAxLCByLCBsYXN0W3ggKyB4ICsgMV0sIGxhc3RbeF0sIGRlcCArIDEpOwp9CgppbnQgcXVlcnlfdXBkYXRlKGludCB4LCBpbnQgbCwgaW50IHIsIGludCB4MSwgaW50IHgyLCBpbnQgaywgaW50IHJlbSwgaW50IGRlcCA9IDApIHsKICAgIAogICAgZG9pdCh4LCBsLCByLCBsYXN0W3hdLCBrLCBkZXApOwogICAgcHVzaCh4LCBsLCByLCBkZXApOwogICAgCiAgICBpZih4MiA8IGwgb3IgciA8IHgxKQogICAgICAgIHJldHVybiAwOwogICAgCiAgICBpZih4MSA8PSBsIGFuZCByIDw9IHgyIGFuZCBhdmxbeF0gPD0gcmVtKSB7CiAgICAgICAgaW50IHJlcyA9IGF2bFt4XTsKICAgICAgICBhdmxbeF0gPSAwOwogICAgICAgIHJldHVybiByZXM7CiAgICB9CiAgICAKICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgIAogICAgaW50IHJlcyA9IHF1ZXJ5X3VwZGF0ZSh4ICsgeCwgbCwgbSwgeDEsIHgyLCBrLCByZW0sIGRlcCArIDEpOwogICAgCiAgICBhc3NlcnQocmVzIDw9IHJlbSk7CiAgICAKICAgIGlmKHJlcyA9PSByZW0pIHsKICAgICAgICBhdmxbeF0gPSBhdmxbeCArIHhdICsgYXZsW3ggKyB4ICsgMV07CiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KICAgIAogICAgcmVzICs9IHF1ZXJ5X3VwZGF0ZSh4ICsgeCArIDEsIG0gKyAxLCByLCB4MSwgeDIsIGssIHJlbSAtIHJlcywgZGVwICsgMSk7CiAgICAKICAgIGF2bFt4XSA9IGF2bFt4ICsgeF0gKyBhdmxbeCArIHggKyAxXTsKICAgIAogICAgcmV0dXJuIHJlczsKCn0KCmludCBtYWluICgpIHsKICAgIAogICAgc2NhbmYoIiVkIiwgJm4pOwogICAgCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBzY2FuZigiJWQgJWQiLCAmYVtpXS5zZWNvbmQsICZhW2ldLmZpcnN0KTsKICAgIAogICAgc29ydChhICsgMSwgYSArIG4gKyAxKTsKICAgIAogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgc3dhcChhW2ldLmZpcnN0LCBhW2ldLnNlY29uZCk7CiAgICAKICAgIGluaXQoMSwgMSwgbik7CiAgICAKICAgIHNjYW5mKCIlZCIsICZtKTsKICAgIAogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspCiAgICAgICAgc2NhbmYoIiVkIiwgYiArIGkpOwogICAgCiAgICBzb3J0KGIgKyAxLCBiICsgbSArIDEpOwogICAgCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBwcmludGYoIiVkICVkXG4iLCBhW2ldLmZpcnN0LCBhW2ldLnNlY29uZCk7CiAgICAKICAgIGludCBqID0gMTsKICAgIAogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICB3aGlsZShqIDw9IG4gYW5kIGFbal0uc2Vjb25kIDwgYltpXSkKICAgICAgICAgICAgaisrOwogICAgICAgIGlmKGogPiBuKSB7CiAgICAgICAgICAgIHB1dHMoIkZBSUwiKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGludCBhbnMgPSBxdWVyeV91cGRhdGUoMSwgMSwgbiwgaiwgbiwgYltpXSwgYltpXSk7CiAgICAgICAgcHJpbnRmKCJqID0gJWQgYW5zID0gJWRcbiIsIGosIGFucyk7CiAgICAgICAgaWYoYW5zIDwgYltpXSkgewogICAgICAgICAgICBwcmludGYoIkZBSUwgLS0+IGJbJWRdID0gJWQiLCBpLCBiW2ldKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwdXRzKCJPSyIpOwogICAgCiAgICByZXR1cm4gMDsKICAgIAp9Cg==