#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define VI vector<int>
#define VL vector<ll>
#define MX vector<VI >
#define all(x) x.begin(), x.end()
#define IOS cin.tie(0)->sync_with_stdio(0)

using namespace std;

const int inf = 2e9;
#define jar array<int, 2>

int main(){

	IOS;

	VI n(4), m(3);
	for(int &i : n) cin >> i;

	MX a(4);
	for(int i=0; i<4; i++) a[i].resize(n[i]);
	for(VI &i : a) for(int &j : i) cin >> j;
	
	vector<MX > d(4);

	for(int i=0; i<3; i++){
		cin >> m[i];
		d[i+1].resize(n[i+1]);
		for(int j=0; j<m[i]; j++){
			int x, y;
			cin >> x >> y;
			d[i+1][y-1].pb(x-1);
		}
	}

	vector<vector<jar> > ord(4); 
	
	for(int i=0; i<4; i++) ord[i].pb({inf, -1});

	for(int i=0; i<n[0]; i++) ord[0].pb({a[0][i], i});
	sort(all(ord[0]));

	VI ok(151515, 1);

	for(int i=1; i<4; i++){
		for(int j=0; j<n[i]; j++){

			for(int r : d[i][j]) ok[r] = 0;
			
			int k = 0;
			while(k < (int)d[i][j].size() &&  !ok[ord[i-1][k][1]]) k++;

			for(int r : d[i][j]) ok[r] = 1;
			
			ord[i].pb({min(inf, ord[i-1][k][0]+a[i][j]), j});

		}
		sort(all(ord[i]));
	}

	int ans = ord[3][0][0];

	if(ans == inf) cout << "-1\n";
	else cout << ans << '\n';

	return 0;
}
