#include <bits/stdc++.h>   using namespace std;   void OUT_TST(string s, istream_iterator<string> it) { cerr << s; }   template <typename T, typename... Args>   void OUT_TST(string s, istream_iterator<string> it, T a, Args... args) {     cerr << *it <<  =  << a <<    ;     OUT_TST(s, ++it, args...);   }   template <class T>   void rd(T &ret) {     ret = 0;     bool ok = 0, u = 0;     for (;;) {       int c = getchar();       if (c >=  0  && c <=  9 )         ret = (ret << 3) + (ret << 1) + c -  0 , ok = 1;       else if (c ==  - )         u = 1;       else if (ok) {         if (u) ret *= -1;         return;       }     }   }   long long powmod(long long p, long long n, long long mod) {     long long ret = 1;     for (; n; n >>= 1) {       if (n & 1) ret = ret * p % mod;       p = p * p % mod;     }     return ret;   }   template <class T>   bool chmin(T &a, const T &b) {     return b < a ? a = b, 1 : 0;   }   template <class T>   bool chmax(T &a, const T &b) {     return b > a ? a = b, 1 : 0;   }   int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }   bool ok(vector<pair<int, int> > &bn, vector<int> &pos, bool tmp) {     vector<pair<int, int> > an(4);     for (int i = (0); i < (4); i++) an[i] = bn[pos[i]];     if (tmp == 1) {       if (an[0].first != an[2].first) return 0;       if (an[0].second >= an[2].second) return 0;       if (an[1].second != an[3].second) return 0;       if (an[1].first <= an[3].first) return 0;       return 1;     }     return 1;     if (an[0].first != an[3].first) return 0;     if (an[0].second >= an[3].second) return 0;     if (an[1].second >= an[2].second) return 0;     return 1;   }   vector<pair<int, int> > gao(vector<pair<int, int> > an, bool tmp) {     vector<int> pos;     for (int i = (0); i < (4); i++) pos.push_back(i);     bool fg = 0;     if (ok(an, pos, tmp)) fg = 1;     while (!fg && next_permutation((pos).begin(), (pos).end())) {       if (ok(an, pos, tmp)) {         assert(fg == 0);         fg = 1;       }     }     vector<pair<int, int> > cn(4);     for (int i = (0); i < (4); i++) cn[i] = an[pos[i]];     return cn;   }   vector<pair<int, int> > an, bn;   int xlow, ylow, xup, yup;   bool ins(int first, int second) {     if (first >= xlow && first <= xup && second >= ylow && second <= yup)       return 1;     return 0;   }   int main() {     pair<int, int> t;     for (int i = (0); i < (4); i++) {       scanf( %d%d , &t.first, &t.second);       an.push_back(t);     }     for (int i = (0); i < (4); i++) {       scanf( %d%d , &t.first, &t.second);       bn.push_back(t);     }     an = gao(an, 0);     bn = gao(bn, 1);     xlow = INT_MAX, ylow = INT_MAX, xup = -INT_MAX, yup = -INT_MAX;     for (int i = (0); i < (4); i++) {       chmin(xlow, an[i].first);       chmax(xup, an[i].first);       chmin(ylow, an[i].second);       chmax(yup, an[i].second);     }     for (int i = (0); i < (4); i++) {       string _s =  an[i].x, an[i].y ;       replace(_s.begin(), _s.end(),  , ,    );       stringstream _ss(_s);       istream_iterator<string> _it(_ss);       OUT_TST(  , _it, an[i].first, an[i].second);     };     puts(  );     for (int i = (0); i < (4); i++) {       string _s =  bn[i].x, bn[i].y ;       replace(_s.begin(), _s.end(),  , ,    );       stringstream _ss(_s);       istream_iterator<string> _it(_ss);       OUT_TST(  , _it, bn[i].first, bn[i].second);     };     puts(  );     int l = bn[1].second, r = bn[1].second;     for (int i = (bn[3].first); i < (bn[1].first + 1); i++) {       for (int j = (l); j < (r + 1); j++)         if (ins(i, j)) {           puts( YES );           return 0;         }       if (i < bn[0].first)         --l, ++r;       else         ++l, --r;     }     puts( NO );     return 0;   }