#include<bits/stdc++.h>
using namespace std;
#define N 1500009
#define INF 5e8
#define mymin(x,y) (x>=y?y:x)
#define mymax(x,y) (x>=y?x:y)
typedef long long int LL;
map<LL, int> mp[3];
int a[4][N];
struct din{
    int ap, id;
}dn[4][N];
bool cmp(din af, din bf){
    return af.ap < bf.ap;
}
int main() {
	std::ios::sync_with_stdio(0); std::cin.tie(0);
    int n[4];
    for(int i = 0; i < 4; i++) cin >> n[i];
    for(int i = 0; i < 4; i++){
        for(int j = 0; j < n[i]; j++){
            cin >> dn[i][j].ap;
            dn[i][j].id = j + 1;
        }
    }
    for(int i = 0; i < 3; i++){
        int m; cin >> m;
        for(int j = 0; j < m; j++){
            int x, y; cin >> x >> y;
            mp[i][1ll * x * N + y] = 1;
        }
    }
    for(int i = 2; i >= 0; i--){
        // cout << i << " " << n[i] << endl;
        // cout << dn[3][0].id << " " << mp[2][0 * N + 1] << endl;
        sort(dn[i + 1], dn[i + 1] + n[i + 1], cmp);
        for(int j = 0; j < n[i]; j++){
            int ind = 0;
            while(ind < n[i + 1] && mp[i][1ll * (j + 1) * N + dn[i + 1][ind].id]) ind++;
            if(ind == n[i + 1]) dn[i][j].ap = INF;
            else dn[i][j].ap += dn[i + 1][ind].ap;
            // cout << dn[i][j].ap << " ";
        }
        // cout << endl;
    }
    sort(dn[0], dn[0] + n[0], cmp);
    if(dn[0][0].ap >= INF) cout << -1 << endl;
    else cout << dn[0][0].ap << endl;
	return 0;
}