#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long INFL = 1e18 + 123;
const double PI = atan2(0, -1);
mt19937 tw(960172);
long long rnd(long long x, long long y) {
  static uniform_int_distribution<long long> d;
  return d(tw) % (y - x + 1) + x;
}
int cross(int x1, int y1, int x2, int y2) { return x1 * y2 - y1 * x2; }
bool inside(int x, int y, vector<pair<int, int> > poly) {
  int s1 = 0, s2 = 0;
  for (int i = 0; i < ((int)(poly).size()); ++i) {
    int next = (i + 1) % ((int)(poly).size());
    int tmp = cross(poly[i].first - x, poly[i].second - y, poly[next].first - x,
                    poly[next].second - y);
    s1 += tmp;
    s2 += abs(tmp);
  }
  return abs(s1) == s2;
}
void solve() {
  vector<pair<int, int> > poly[2];
  for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < 4; ++j) {
      int x, y;
      cin >> x >> y;
      poly[i].push_back({x, y});
    }
  }
  for (int x = -150; x <= 150; ++x) {
    for (int y = -150; y <= 150; ++y) {
      if (inside(x, y, poly[0]) && inside(x, y, poly[1])) {
        cout << "YES\n";
        return;
      }
    }
  }
  cout << "NO\n";
}
int main() {
  cerr << fixed << setprecision(15);
  cout << fixed << setprecision(15);
  ios::sync_with_stdio(false);
  int tests = 1;
  for (int it = 1; it <= tests; ++it) {
    solve();
  }
  return 0;
}
