#include <bits/stdc++.h>
using namespace std;
const int INF = 10000;
struct Point {
  int x;
  int y;
};
bool onSegment(Point p, Point q, Point r) {
  return (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));
}
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(vector<Point> polygon, Point p) {
  int n = polygon.size();
  if (n < 3) return false;
  Point extreme = {INF, 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() {
  vector<Point> a, b;
  for (int i = 0; i < 4; ++i) {
    Point p;
    cin >> p.x >> p.y;
    a.push_back(p);
  }
  for (int i = 0; i < 4; ++i) {
    Point p;
    cin >> p.x >> p.y;
    b.push_back(p);
  }
  for (int i = 0; i < 4; ++i) {
    for (int j = 0; j < 4; ++j) {
      if (doIntersect(a[i], a[(i + 1) % 4], b[j], b[(j + 1) % 4])) {
        cout << "Yes" << endl;
        return 0;
      }
    }
  }
  bool all = true;
  for (int i = 0; i < 4; ++i) {
    if (!isInside(a, b[i])) {
      all = false;
      break;
    }
  }
  if (all) {
    cout << "Yes" << endl;
    return 0;
  }
  all = true;
  for (int i = 0; i < 4; ++i) {
    if (!isInside(b, a[i])) {
      all = false;
      break;
    }
  }
  if (all) {
    cout << "Yes" << endl;
    return 0;
  }
  cout << "No" << endl;
  return 0;
}
