#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int BASE = 27;
const int oo = 1e9;
const double EPS = 1e-9;
const int MX = 1e5 + 1;
int n, a[10], bit[MX + 10];
pair<int, int> p[MX + 10];
vector<int> allX, allY, seg[4 * MX + 10], f[MX];
void build(int n, int s, int e) {
  if (s == e) {
    seg[n] = f[s];
    return;
  }
  build(2 * n, s, (s + e) / 2);
  build(2 * n + 1, (s + e) / 2 + 1, e);
  for (int i = 0; i < seg[2 * n].size(); ++i) seg[n].push_back(seg[2 * n][i]);
  for (int i = 0; i < seg[2 * n + 1].size(); ++i)
    seg[n].push_back(seg[2 * n + 1][i]);
  sort(seg[n].begin(), seg[n].end());
}
int l, r, first, second;
int query(int n, int s, int e) {
  if (s > r || e < l) return 0;
  if (s >= l && e <= r)
    return upper_bound(seg[n].begin(), seg[n].end(), second) -
           lower_bound(seg[n].begin(), seg[n].end(), first);
  return query(2 * n, s, (s + e) / 2) + query(2 * n + 1, (s + e) / 2 + 1, e);
}
int idx(int val, vector<int> &first) {
  return lower_bound(first.begin(), first.end(), val) - first.begin() + 1;
}
int qu(int x1, int y1, int x2, int y2) {
  l = x1, r = x2, first = y1, second = y2;
  return query(1, 1, MX);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &p[i].first, &p[i].second);
    allX.push_back(p[i].first);
    allY.push_back(p[i].second);
  }
  sort(p, p + n);
  sort(allX.begin(), allX.end());
  sort(allY.begin(), allY.end());
  for (int i = 0; i < n; ++i) {
    p[i].first =
        lower_bound(allX.begin(), allX.end(), p[i].first) - allX.begin() + 1;
    p[i].second =
        lower_bound(allY.begin(), allY.end(), p[i].second) - allY.begin() + 1;
    f[p[i].first].push_back(p[i].second);
  }
  for (int i = 0; i < 9; ++i) scanf("%d", a + i);
  build(1, 1, MX);
  sort(a, a + 9);
  do {
    int v1_idx = a[0] + a[1] + a[2];
    int v2_idx = a[0] + a[1] + a[2] + a[3] + a[4] + a[5];
    int h1_idx = a[0] + a[3] + a[6];
    int h2_idx = a[0] + a[3] + a[6] + a[1] + a[4] + a[7];
    int v1 = allX[v1_idx - 1], v2 = allX[v2_idx - 1];
    int h1 = allY[h1_idx - 1], h2 = allY[h2_idx - 1];
    int f1 = qu(1, 1, v1_idx, h1_idx);
    int f2 = qu(1, h2_idx + 1, v1_idx, MX);
    int f3 = qu(v2_idx + 1, 1, MX, h1_idx);
    int f4 = qu(v2_idx + 1, h2_idx + 1, MX, MX);
    int c1 = upper_bound(allX.begin(), allX.end(), v1) - allX.begin();
    int c2 = upper_bound(allX.begin(), allX.end(), v2) - allX.begin();
    int c3 = upper_bound(allY.begin(), allY.end(), h1) - allY.begin();
    int c4 = upper_bound(allY.begin(), allY.end(), h2) - allY.begin();
    if (c3 != h1_idx || c4 != h2_idx) continue;
    if (c1 != v1_idx || c2 != v2_idx) continue;
    if (f1 == a[0] && f2 == a[2] && f3 == a[6] && f4 == a[8]) {
      printf("%.9lf %9lf\n", v1 + 0.5, v2 + 0.5);
      printf("%.9lf %9lf\n", h1 + 0.5, h2 + 0.5);
      return 0;
    }
  } while (next_permutation(a, a + 9));
  puts("-1");
  return 0;
}
