#include <bits/stdc++.h>
using namespace std;
bool onseg(pair<int, int> p, pair<int, int> q, pair<int, int> r) {
  if (q.first <= max(p.first, r.first) && q.first >= min(p.first, r.first) &&
      q.second <= max(p.second, r.second) &&
      q.second >= min(p.second, r.second))
    return true;
  return false;
}
int orient(pair<int, int> p, pair<int, int> q, pair<int, int> r) {
  int val = (q.second - p.second) * (r.first - q.first) -
            (q.first - p.first) * (r.second - q.second);
  if (val == 0) return 0;
  return (val > 0) ? 1 : 2;
}
bool check(pair<int, int> p1, pair<int, int> q1, pair<int, int> p2,
           pair<int, int> q2) {
  int o1 = orient(p1, q1, p2);
  int o2 = orient(p1, q1, q2);
  int o3 = orient(p2, q2, p1);
  int o4 = orient(p2, q2, q1);
  if (o1 != o2 && o3 != o4) return true;
  if (o1 == 0 && onseg(p1, p2, q1)) return true;
  if (o2 == 0 && onseg(p1, q2, q1)) return true;
  if (o3 == 0 && onseg(p2, p1, q2)) return true;
  if (o4 == 0 && onseg(p2, q1, q2)) return true;
  return false;
}
int main() {
  vector<pair<int, int> > vp[2];
  for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < 4; ++j) {
      int x, y;
      cin >> x >> y;
      vp[i].push_back(make_pair(x, y));
    }
  }
  bool ans = 0;
  int sq0 = pow(vp[0][1].first - vp[0][0].first, 2) +
            pow(vp[0][0].second - vp[0][1].second, 2);
  int sq1 = pow(vp[1][1].first - vp[1][0].first, 2) +
            pow(vp[1][0].second - vp[1][1].second, 2);
  for (int i = 0; i < 4; ++i) {
    for (int x = 1; x < 4 && x != i; ++x) {
      for (int j = 0; j < 4; ++j) {
        for (int y = 1; y < 4 && y != j; ++y) {
          if (check(vp[0][i], vp[0][x], vp[1][j], vp[1][y])) {
            ans = 1;
            break;
          }
        }
      }
    }
  }
  if (ans)
    cout << "YES";
  else
    cout << "NO";
}
