#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int maxn=2e5+10;

int n[5],a[5][maxn];
int m[5];
int dp[5][maxn];

vector<int> v[5][maxn];
multiset<int> s;

int main(){
    for(int i=1;i<=4;i++) cin>>n[i];
    for(int i=1;i<=4;i++){
        for(int j=1;j<=n[i];j++) scanf("%d",&a[i][j]);
    }
    int x,y;
    for(int i=2;i<=4;i++){
        cin>>m[i];
        for(int j=1;j<=m[i];j++){
            scanf("%d %d",&x,&y);
            v[i][y].push_back(x);
        }
    }
    memset(dp,0x3f,sizeof dp);
    for(int i=1;i<=n[1];i++) dp[1][i]=a[1][i];
    for(int i=2;i<=4;i++){
        for(int j=1;j<=n[i-1];j++) s.insert(dp[i-1][j]);
        for(int j=1;j<=n[i];j++){
            for(auto it:v[i][j]) s.erase(s.find(dp[i-1][it]));
            if(!s.empty()) dp[i][j]=*s.begin()+a[i][j];
            for(auto it:v[i][j]) s.insert(dp[i-1][it]);
        }
        s.clear(); 
    }
    int ans=0x3f3f3f3f;
    for(int i=1;i<=n[4];i++) ans=min(ans,dp[4][i]);
    printf("%d\n",ans==0x3f3f3f3f?-1:ans);
    return 0;
}