#include <bits/stdc++.h>
using namespace std;
const int inf = 1e10, N = 110000;
struct tree {
  int lc, rc, sz;
  int l, r;
} tr[N << 5], nul;
int cnt = 0, n, b[N], a[N], c[N], ok = 0, s[N], tox[N], toy[N], root[N];
struct XY {
  int x, y, rx, ry;
} p[N];
bool cmp_x(XY x, XY y) { return x.x < y.x; }
bool cmp_y(XY x, XY y) { return x.y < y.y; }
int newnode() {
  tr[++cnt] = nul;
  return cnt;
}
void build(int now, int pre, int l, int r, int add) {
  tr[now].sz = tr[pre].sz + 1;
  tr[now].l = l, tr[now].r = r;
  if (l == r) return;
  if (add <= (l + (r - l) / 2)) {
    tr[now].rc = tr[pre].rc, tr[now].lc = newnode();
    build(tr[now].lc, tr[pre].lc, l, (l + (r - l) / 2), add);
  } else {
    tr[now].lc = tr[pre].lc, tr[now].rc = newnode();
    build(tr[now].rc, tr[pre].rc, (l + (r - l) / 2) + 1, r, add);
  }
}
int query(int now, int pre, int v) {
  if (tr[now].l == tr[now].r) return tr[now].l;
  int sum = tr[tr[now].lc].sz - tr[tr[pre].lc].sz;
  if (v <= sum)
    return query(tr[now].lc, tr[pre].lc, v);
  else
    return query(tr[now].rc, tr[pre].rc, v - sum);
}
void solve() {
  int in, ax, y1, y2, pos1, pos2;
  s[0] = 0, s[1] = b[1] + b[4] + b[7], s[2] = s[1] + b[2] + b[5] + b[8],
  s[3] = n;
  if ((tox[s[1]] == tox[s[1] + 1]) || tox[s[2]] == tox[s[2] + 1]) return;
  in = -inf, ax = inf;
  for (int i = 1; i <= 3; i++) {
    pos1 = query(root[s[i]], root[s[i - 1]], b[i]);
    pos2 = query(root[s[i]], root[s[i - 1]], b[i] + 1);
    in = max(in, toy[pos1]), ax = min(ax, toy[pos2]);
    if (in >= ax) return;
  }
  y1 = in;
  in = -inf, ax = inf;
  for (int i = 1; i <= 3; i++) {
    pos1 = query(root[s[i]], root[s[i - 1]], b[i] + b[i + 3]);
    pos2 = query(root[s[i]], root[s[i - 1]], b[i] + 1 + b[i + 3]);
    in = max(in, toy[pos1]), ax = min(ax, toy[pos2]);
    if (in >= ax) return;
  }
  y2 = in;
  ok = 1;
  printf("%.6f %.6f\n%.6f %.6f\n", (double)tox[s[1]] + 0.5,
         (double)tox[s[2]] + 0.5, (double)y1 + 0.5, (double)y2 + 0.5);
}
signed main() {
  cin >> n;
  for (int i = 1; i <= n; i++) scanf("%d%d", &p[i].x, &p[i].y);
  sort(p + 1, p + n + 1, cmp_y);
  for (int i = 1; i <= n; i++) p[i].ry = i, toy[i] = p[i].y;
  sort(p + 1, p + n + 1, cmp_x);
  for (int i = 1; i <= n; i++) p[i].rx = i, tox[i] = p[i].x;
  for (int i = 1; i <= 9; i++) scanf("%d", &a[i]), c[i] = i;
  nul.lc = nul.rc = nul.sz = 0;
  tr[0] = nul, root[0] = 0;
  for (int i = 1; i <= n; i++)
    root[i] = newnode(), build(root[i], root[i - 1], 1, n, p[i].ry);
  for (int i = 1; i <= 362880 && !ok; i++) {
    for (int j = 1; j <= 9; j++) b[j] = a[c[j]];
    solve();
    next_permutation(c + 1, c + 9 + 1);
  }
  if (!ok) puts("-1");
  while (clock() <= 999) cerr << "233~~";
  return 0;
}
