#include <bits/stdc++.h>
using namespace std;
double hx[400001], hy[400001];
int per[11], n, m, chx, chy;
struct NODE {
  int x, y;
  int id;
} asd[400001];
bool cx(NODE i, NODE j) { return i.x < j.x; }
bool cy(NODE i, NODE j) { return i.y < j.y; }
struct point {
  int x, y;
} P[400001], P1[400001];
int Sx[400001], Sy[400001];
bool cmp(point i, point j) { return i.x < j.x; }
double y7, y2, x1, x2;
int L[400001], R[400001];
vector<point> pg[400001];
bool cmp2(point i, point j) { return i.y < j.y; }
void build(int no, int l, int r) {
  L[no] = l;
  R[no] = r;
  int mid = (L[no] + R[no]) >> 1;
  for (int i = l; i <= r; i++) {
    pg[no].push_back(P[i]);
  }
  sort(pg[no].begin(), pg[no].end(), cmp2);
  if (l == r) return;
  build(no << 1, l, mid);
  build(no << 1 | 1, mid + 1, r);
}
int query(int no, int l, int r, int k) {
  if (L[no] == l && R[no] == r) {
    int ll = 0, rr = pg[no].size() - 1, ans = -1;
    while (ll <= rr) {
      int mid = (ll + rr) >> 1;
      if (pg[no][mid].y <= k) {
        ans = mid;
        ll = mid + 1;
      } else
        rr = mid - 1;
    }
    return ans + 1;
  }
  int mid = (L[no] + R[no]) >> 1;
  if (l > mid) return query(no << 1 | 1, l, r, k);
  if (r <= mid) return query(no << 1, l, r, k);
  return query(no << 1, l, mid, k) + query(no << 1 | 1, mid + 1, r, k);
}
void gethash() {
  sort(asd + 1, asd + n + 1, cx);
  hx[++chx] = asd[1].x;
  P[asd[1].id].x = 1;
  Sx[1] = 1;
  for (int i = 2; i <= n; i++) {
    if (asd[i].x != asd[i - 1].x) {
      hx[++chx] = asd[i].x;
      Sx[chx] = Sx[chx - 1] + 1;
    } else
      Sx[chx]++;
    P[asd[i].id].x = chx;
  }
  sort(asd + 1, asd + n + 1, cy);
  hy[++chy] = asd[1].y;
  P[asd[1].id].y = 1;
  Sy[chy] = 1;
  for (int i = 2; i <= n; i++) {
    if (asd[i].y != asd[i - 1].y) {
      hy[++chy] = asd[i].y;
      Sy[chy] = Sy[chy - 1] + 1;
    } else
      Sy[chy]++;
    P[asd[i].id].y = chy;
  }
}
bool ok() {
  int a1 = per[1] + per[2] + per[3], a2 = per[4] + per[5] + per[6] + a1;
  int x1 = P[a1].x, x2 = P[a2].x;
  if (P[a1 + 1].x == x1 || P[a2 + 1].x == x2) return 0;
  int b1 = per[1] + per[4] + per[7], b2 = b1 + per[2] + per[5] + per[8];
  int y1 = P1[b1].y, y2 = P1[b2].y;
  if (P1[b2 + 1].y == y2 || P1[b1 + 1].y == y1) return 0;
  if (query(1, 1, a1, y1) != per[1]) return 0;
  if (query(1, 1, a1, y2) != per[1] + per[2]) return 0;
  if (query(1, 1, a2, y2) != per[1] + per[2] + per[4] + per[5]) return 0;
  if (query(1, 1, a2, y1) != per[1] + per[4]) return 0;
  printf("%.7lf %.7lf\n%.7lf %.7lf\n", hx[x1] + 0.5, hx[x2] + 0.5, hy[y1] + 0.5,
         hy[y2] + 0.5);
  return 1;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++)
    scanf("%d %d", &asd[i].x, &asd[i].y), asd[i].id = i;
  for (int i = 1; i <= 9; i++) cin >> per[i];
  gethash();
  sort(P + 1, P + n + 1, cmp);
  for (int i = 1; i <= n; i++) P1[i] = P[i];
  sort(P1 + 1, P1 + n + 1, cmp2);
  build(1, 1, n);
  sort(per + 1, per + 10);
  if (ok()) {
    return 0;
  }
  while (next_permutation(per + 1, per + 10)) {
    if (ok()) {
      return 0;
    }
  }
  puts("-1");
}
