#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x;
  int y;
};
bool onSegment(Point p, Point q, Point r) {
  if (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) && q.y <= max(p.y, r.y) &&
      q.y >= min(p.y, r.y))
    return true;
  return false;
}
int orientation(Point p, Point q, Point r) {
  int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
  if (val == 0) return 0;
  return (val > 0) ? 1 : 2;
}
bool doIntersect(Point p1, Point q1, Point p2, Point q2) {
  int o1 = orientation(p1, q1, p2);
  int o2 = orientation(p1, q1, q2);
  int o3 = orientation(p2, q2, p1);
  int o4 = orientation(p2, q2, q1);
  if (o1 != o2 && o3 != o4) return true;
  if (o1 == 0 && onSegment(p1, p2, q1)) return true;
  if (o2 == 0 && onSegment(p1, q2, q1)) return true;
  if (o3 == 0 && onSegment(p2, p1, q2)) return true;
  if (o4 == 0 && onSegment(p2, q1, q2)) return true;
  return false;
}
bool isInside(Point polygon[], int n, Point p) {
  if (n < 3) return false;
  Point extreme = {10000000, p.y};
  int count = 0, i = 0;
  do {
    int next = (i + 1) % n;
    if (doIntersect(polygon[i], polygon[next], p, extreme)) {
      if (orientation(polygon[i], p, polygon[next]) == 0)
        return onSegment(polygon[i], p, polygon[next]);
      count++;
    }
    i = next;
  } while (i != 0);
  return count & 1;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  Point sq[4], sqq[4];
  for (int i = 0; i < 4; i++) {
    cin >> sq[i].x >> sq[i].y;
  }
  for (int i = 0; i < 4; i++) {
    cin >> sqq[i].x >> sqq[i].y;
  }
  vector<pair<Point, Point>> v, vv;
  for (int i = 0; i < 3; i++) {
    v.push_back({sq[i], sq[i + 1]});
  }
  v.push_back({sq[3], sq[0]});
  for (int i = 0; i < 3; i++) {
    vv.push_back({sqq[i], sqq[i + 1]});
  }
  vv.push_back({sqq[3], sqq[0]});
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      if (doIntersect(v[i].first, v[i].second, vv[j].first, vv[j].second)) {
        cout << "YES";
        return 0;
      }
    }
  }
  for (int i = 0; i < 4; i++) {
    if (isInside(sqq, 4, sq[i])) {
      cout << "YES";
      return 0;
    }
    if (isInside(sq, 4, sqq[i])) {
      cout << "YES";
      return 0;
    }
  }
  cout << "NO";
  return 0;
}
