#pragma comment(linker, "/STACK:60000000")
#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <ctime>
#include <cstring>
#include <cassert>
#include <sstream>
#include <iomanip>
#include <complex>
#include <queue>
#include <functional>

using namespace std;

#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define ford(i, n) for(int i = (int)(n) - 1; i >= 0; i--)
#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define x first
#define y second
#define last(a) int(a.size() - 1)
#define all(a) a.begin(), a.end()
#define seta(a,x) memset (a, x, sizeof (a))
#define I (int)
#define y1 botva

typedef long long int64;
typedef long double ldb;
typedef pair <long long, long long> pii;

const long double eps = 1e-7;
const int inf = (1 << 30) - 1;
const int64 inf64 = ((int64)1 << 62) - 1;
const long double pi = 3.1415926535897932384626433832795;
const string task = "trian";

template <class T> T sqr (T x) {return x * x;}

long long x1, x2, y1, y2, a1, a2, b1, b2;
vector<pii> g[2];

struct line{
	long long a, b, c;
	line () {}
	line (pii v, pii u){
		a = u.y - v.y;
		b = v.x - u.x;
		c = -(a * v.x + b * v.y);
	}
};

pii operator -(pii a, pii b){
	return pii(a.x - b.x, a.y - b.y);
}

void no(){
	puts("No");
	exit(0);
}

void yes(){
	puts("Yes");
	exit(0);
}

long long side(line l, pii v){
	long long res = l.a * v.x + l.b * v.y + l.c;
	if (res > 0) return 1;
	if (res < 0) return -1;
	return 0;
}

bool interseq(pii a, pii b, pii c, pii d){
	line l1(a, b);
	line l2(c, d);
//	cerr << a.x << " " << a.y << " " << b.x << " " << b.y << endl;
//	cerr << c.x << " " << c.y << " " << d.x << " " << d.y << endl;
//	cerr << side(l2, a) << " " << side(l2, b) << endl;
//	cerr << side(l1, c) << " " << side(l1, d) << endl;
//	cerr << endl;
	if (side(l2, a) * side(l2, b) > 0) return 0;
	if (side(l1, c) * side(l1, d) > 0) return 0;
	if (a > b) swap(a,b);
	if (c > d) swap(c,d);
	if (a > c) {swap(a,c); swap(b, d);};
	if (side(l2,a) == 0 && side(l2, b) == 0 && c > b) return 0;
	return 1;
}

long long calc(pii a, pii b){
	return a.x * b.y - a.y * b.x;
}

bool into(pii a, vector<pii> b){
	if (abs(calc(b[1] - b[0], b[2] - b[0])) > 0 && abs(calc(b[0] - a, b[1] - a)) + abs(calc(b[1] - a, b[2] - a)) + abs(calc(b[2] - a, b[0] - a)) == abs(calc(b[1] - b[0], b[2] - b[0])))
		return 1;
	forn(i,b.size())
		if (b[i] == a) return 1;
	return 0;
}

void build(){
	g[0].pb(mp(x1, y1));
	g[0].pb(mp(x1 + a1, y1));
	g[0].pb(mp(x1, y1 + b1));
	g[1].pb(mp(x2, y2));
	g[1].pb(mp(x2 + a2, y2));
	g[1].pb(mp(x2, y2 + b2));
}

void solve(){
	build();
	forn (i, g[0].size())
		if (into(g[0][i], g[1]))
			yes();
	forn (i, g[1].size())
		if (into(g[1][i], g[0]))
			yes();
	forn(i,g[0].size())
		forn(j,g[1].size())
			if (interseq(g[0][i], g[0][(i + 1) % g[0].size()], g[1][j], g[1][(j + 1) % g[1].size()]))
				yes();
}

void read(){
	cin >> x1 >> y1 >> a1 >> b1;
	cin >> x2 >> y2 >> a2 >> b2;
}

int main ()
{
	freopen ((task + ".in").data(), "r", stdin);
	freopen ((task + ".out").data(), "w", stdout);

	read();
	solve();
	no();

	return 0;
}