#include <bits/stdc++.h>
using namespace std;
struct DCT {
  int id, v;
  bool operator<(const DCT &_sort) const { return v < _sort.v; }
};
struct Tree {
  int l, r, sum;
  Tree *left, *right;
};
int n, mc, nx = -1, ny = -1, a[9], cnt[9], x[100000], y[100000], ix[100000],
           iy[100000], dx[100000], dy[100000];
bool ok, vis[9];
double ans[4];
DCT dct[100000];
Tree memory[2000000], *tree[100000];
Tree *BuildTree(int l, int r) {
  Tree *t = &memory[mc++];
  t->l = l, t->r = r;
  if (l < r) {
    t->left = BuildTree(l, (l + r) / 2);
    t->right = BuildTree((l + r) / 2 + 1, r);
  }
  return t;
}
int GetSum(Tree *t, int l, int r) {
  if (t->l == l && t->r == r) return t->sum;
  if (r <= t->left->r) return GetSum(t->left, l, r);
  if (l >= t->right->l) return GetSum(t->right, l, r);
  return GetSum(t->left, l, t->left->r) + GetSum(t->right, t->right->l, r);
}
Tree *Add(Tree *t, int x) {
  Tree *ret = &memory[mc++];
  ret->l = t->l, ret->r = t->r, ret->sum = t->sum + 1;
  ret->left = t->left, ret->right = t->right;
  if (t->l < t->r) {
    if (x <= t->left->r)
      ret->left = Add(t->left, x);
    else
      ret->right = Add(t->right, x);
  }
  return ret;
}
void Check() {
  if (ok) return;
  int xl = a[0] + a[3] + a[6] - 1, xr = n - a[2] - a[5] - a[8];
  int yl = a[0] + a[1] + a[2] - 1, yr = n - a[6] - a[7] - a[8];
  if (ix[xl] == ix[xl + 1] || ix[xr] == ix[xr - 1] || iy[yl] == iy[yl + 1] ||
      iy[yr] == iy[yr - 1])
    return;
  xl = ix[xl], xr = ix[xr], yl = iy[yl], yr = iy[yr];
  if (GetSum(tree[yl], 0, xl) != a[0] ||
      GetSum(tree[yr - 1], 0, xl) != a[0] + a[3] ||
      GetSum(tree[yl], 0, xr - 1) != a[0] + a[1] ||
      GetSum(tree[yr - 1], 0, xr - 1) != a[0] + a[1] + a[3] + a[4])
    return;
  ans[0] = 0.5 + dx[xl];
  ans[1] = -0.5 + dx[xr];
  ans[2] = 0.5 + dy[yl];
  ans[3] = -0.5 + dy[yr];
  ok = true;
}
void Dfs(int depth) {
  if (depth == 9)
    Check();
  else {
    for (int i = 0; i < 9; i++) {
      if (!vis[i]) {
        vis[i] = true;
        a[depth] = cnt[i];
        Dfs(depth + 1);
        vis[i] = false;
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]);
  for (int i = 0; i < 9; i++) scanf("%d", &cnt[i]);
  for (int i = 0; i < n; i++) dct[i].id = i, dct[i].v = x[i];
  sort(dct, dct + n);
  for (int i = 0; i < n; i++) {
    if (!i || dct[i].v != dct[i - 1].v) dx[++nx] = dct[i].v;
    x[dct[i].id] = ix[i] = nx;
  }
  for (int i = 0; i < n; i++) dct[i].id = i, dct[i].v = y[i];
  sort(dct, dct + n);
  for (int i = 0; i < n; i++) {
    if (!i || dct[i].v != dct[i - 1].v) dy[++ny] = dct[i].v;
    y[dct[i].id] = iy[i] = ny;
  }
  tree[0] = BuildTree(0, nx);
  for (int i = 0; i < n; i++)
    tree[iy[i]] = Add(tree[i ? iy[i - 1] : 0], x[dct[i].id]);
  Dfs(0);
  if (!ok)
    printf("-1\n");
  else
    printf("%lf %lf\n%lf %lf\n", ans[0], ans[1], ans[2], ans[3]);
  getchar();
  getchar();
  return 0;
}
