#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100005;
struct point {
  int x, y;
};
point p1[MAX_N];
point p2[MAX_N];
int A[10];
int n;
bool comp1(point p1, point p2) {
  return p1.x < p2.x || p1.x == p2.x && p1.y < p2.y;
}
bool comp2(point p1, point p2) {
  return p1.y < p2.y || p1.y == p2.y && p1.x < p2.x;
}
struct node {
  int l, r;
  vector<int> vec;
} T[MAX_N << 2];
void build(int rt, int l, int r) {
  vector<int> &vec = T[rt].vec;
  T[rt].l = l;
  T[rt].r = r;
  for (int i = l; i <= r; i++) vec.push_back(p1[i].y);
  sort(vec.begin(), vec.end());
  if (l == r) return;
  int mid = (l + r) / 2;
  build((rt << 1), l, mid);
  build((rt << 1 | 1), mid + 1, r);
}
int query(int rt, int l, int r, int y) {
  if (T[rt].l == l && T[rt].r == r) {
    vector<int> &vec = T[rt].vec;
    return upper_bound(vec.begin(), vec.end(), y) - vec.begin();
  }
  if (T[(rt << 1)].r >= r)
    return query((rt << 1), l, r, y);
  else if (T[(rt << 1 | 1)].l <= l)
    return query((rt << 1 | 1), l, r, y);
  else
    return query((rt << 1), l, T[(rt << 1)].r, y) +
           query((rt << 1 | 1), T[(rt << 1 | 1)].l, r, y);
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> p1[i].x >> p1[i].y;
    p2[i] = p1[i];
  }
  sort(p1 + 1, p1 + n + 1, comp1);
  sort(p2 + 1, p2 + n + 1, comp2);
  for (int i = 1; i <= 9; i++) cin >> A[i];
  sort(A + 1, A + 10);
  build(1, 1, n);
  do {
    int s1 = A[1] + A[2] + A[3];
    int s2 = A[1] + A[2] + A[3] + A[4] + A[5] + A[6];
    int t1 = A[1] + A[4] + A[7];
    int t2 = A[1] + A[2] + A[4] + A[5] + A[7] + A[8];
    if (p1[s1].x == p1[s1 + 1].x) continue;
    int x0 = p1[s1].x;
    if (p1[s2].x == p1[s2 + 1].x) continue;
    int x1 = p1[s2].x;
    if (p2[t1].y == p2[t1 + 1].y) continue;
    int y0 = p2[t1].y;
    if (p2[t2].y == p2[t2 + 1].y) continue;
    int y1 = p2[t2].y;
    if (query(1, 1, s1, y0) != A[1]) continue;
    if (query(1, 1, s1, y1) != A[1] + A[2]) continue;
    if (query(1, 1, s2, y0) != A[1] + A[4]) continue;
    if (query(1, 1, s2, y1) != A[1] + A[2] + A[4] + A[5]) continue;
    cout << fixed << setprecision(10) << x0 + 0.5 << ' ' << x1 + 0.5 << ' '
         << y0 + 0.5 << ' ' << y1 + 0.5 << endl;
    exit(0);
  } while (next_permutation(A + 1, A + 10));
  cout << -1 << endl;
  return 0;
}
