#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>
#include <climits>

using namespace std;

double EPS = 1e-12;

//誤差を考慮して足し算を行う
double add(double a, double b) {
	if( abs(a + b) < EPS * (abs(a) + abs(b))) {
		return 0;
	}

	return a + b;
}

//二次元ベクトル構造体
struct P {
	double x, y;

	P() {}
	P(double x, double y) : x(x), y(y) {
	}
	P operator + (P p) {
		return P(add(x, p.x), add(y, p.y));
	}
	P operator - (P p) {
		return P(add(x, -p.x), add(y, -p.y));
	}
	P operator * (double d) {
		return P(x * d, y * d);
	}
	double dot(P p) {	//　内積
		return add(x * p.x, y * p.y);
	}
	double det(P p) {	//　外積
		return add(x * p.y, -y * p.x);
	}
};

//　線分p1-p2上に点qがあるか判定
bool on_seg(P p1, P p2, P q) {
		return (p1 - q).det(p2 - q) == 0 && (p1 - q).dot(p2 - q) <= 0;
}

//　直線p1-p2と直線q1-q2の交点
P intersection(P p1, P p2, P q1, P q2) {
	return p1 + (p2 - p1) * ((q2 - q1).det(q1 - p1) / (q2 - q1).det(p2 - p1));
}

// 2直線の直交判定 : a⊥b <=> dot(a, b) = 0
int is_orthogonal(P a1, P a2, P b1, P b2) {
  return add( (a1 - a2).dot(b1 - b2), 0.0 );
}

// 2直線の平行判定 : a//b <=> det(a, b) = 0
int is_parallel(P a1, P a2, P b1, P b2) {
	return add( (a1 - a2).det(b1 - b2), 0.0 );
}

// a1,a2を端点とする線分とb1,b2を端点とする線分の交差判定
int is_intersected_ls(P a1, P a2, P b1, P b2) {
  return ( (a2 - a1).det(b1 - a1) * (a2 - a1).det(b2 - a1) < EPS ) &&
         ( (b2 - b1).det(a1 - b1) * (b2 - b1).det(a2 - b1) < EPS );
}

//向き
int ccw(P a, P b, P c) {
	a = b - a;
	b = c - b;

	if(a.det(b) < 0) {
		return -1;
	} else if(b.det(c) > 0) {
		return 1;
	}

	return 0;
}

int main() {

	P p[4];

	while( cin >> p[0].x >> p[0].y >> p[1].x >> p[1].y >> p[2].x >> p[2].y >> p[3].x >> p[3].y ) {
		P ap[4], bp[4];
		ap[0].x = p[0].x;
		ap[0].y = p[1].y;
		ap[1].x = p[0].x;
		ap[1].y = p[0].y;
		ap[2].x = p[1].x;
		ap[2].y = p[0].y;
		ap[3].x = p[1].x;
		ap[3].y = p[1].y;

		bp[0].x = p[2].x;
		bp[0].y = p[3].y;
		bp[1].x = p[2].x;
		bp[1].y = p[2].y;
		bp[2].x = p[3].x;
		bp[2].y = p[2].y;
		bp[3].x = p[3].x;
		bp[3].y = p[3].y;


		bool flag = false;
		for(int i = 0; i < 4; i++) {
			if( is_intersected_ls(ap[i], ap[(i + 1) % 4], bp[i], bp[(i + 1) % 4]) > 0) {
				flag = true;
				break;
			}
		}

		if(!flag){
			int n;
			if(ap[0].x <= bp[0].x) {
				n = (ap[1] - ap[0]).dot(bp[1] - ap[0]);
				if(n > 0) {
					flag = true;
				}
			} else if(ap[0].x > bp[0].x) {
				n = (bp[1] - bp[0]).dot(ap[1] - bp[0]);
				if(n > 0) {
					flag = true;
				}
			}
		}

		if(flag) {
			cout << "YES" << endl;
		} else {
			cout << "NO" << endl;
		}
	}
}