#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define ll long long
#define mp make_pair
#define pb push_back
#define mt(a,val) memset(a,val,sizeof(a))
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const double pi = 3.14159265;
const int maxn = 2e5 + 7;
int n[4];
int a[maxn], b[maxn], c[maxn], d[maxn];
ll cost[4][maxn];
bool cmp0(int x, int y)
{
    return cost[0][x] < cost[0][y];
}
bool cmp1(int x, int y)
{
    return cost[1][x] < cost[1][y];
}
bool cmp2(int x, int y)
{
    return cost[2][x] < cost[2][y];
}
bool cmp3(int x, int y)
{
    return cost[3][x] < cost[3][y];
}
set <int> dis[maxn];
int m, ind[maxn];
int u, v;
int main()
{
    for(int i = 0; i < 4; i ++)
        scanf("%d", &n[i]);
    for(int i = 1; i <= n[0]; i ++)
        scanf("%d", &a[i]);
    for(int i = 1; i <= n[1]; i ++)
        scanf("%d", &b[i]);
    for(int i = 1; i <= n[2]; i ++)
        scanf("%d", &c[i]);
    for(int i = 1; i <= n[3]; i ++)
        scanf("%d", &d[i]);

    mt(cost, INF);
    scanf("%d", &m);
    for(int i = 1; i <= n[0]; i ++)
        cost[0][i] = a[i], ind[i] = i;

    sort(ind + 1, ind + 1 + n[0], cmp0);
    for(int i = 0; i < m; i ++)
    {
        scanf("%d%d", &u, &v);
        dis[v].insert(u);
    }


    for(int i = 1; i <= n[1]; i ++)
    {
        for(int j = 1; j <= n[0]; j ++)
        {
            int k = ind[j];
            if(!dis[i].count(k))
            {
                if(cost[0][k] != INF)
                cost[1][i] = b[i] + cost[0][k];
                break;
            }
        }
        //cout<<cost[1][i]<<endl;
        dis[i].clear();
    }



    scanf("%d", &m);
    for(int i = 1; i <= n[1]; i ++)
        ind[i] = i;

    sort(ind + 1, ind + 1 + n[1], cmp1);
    for(int i = 0; i < m; i ++)
    {
        scanf("%d%d", &u, &v);
        dis[v].insert(u);
    }


    for(int i = 1; i <= n[2]; i ++)
    {
        for(int j = 1; j <= n[1]; j ++)
        {
            int k = ind[j];
            if(!dis[i].count(k))
            {
                if(cost[1][k] != INF)
                cost[2][i] = c[i] + cost[1][k];
                break;
            }
        }
        //cout<<cost[2][i]<<endl;
        dis[i].clear();
    }

    scanf("%d", &m);
    for(int i = 1; i <= n[2]; i ++)
        ind[i] = i;

    sort(ind + 1, ind + 1 + n[2], cmp2);
    for(int i = 0; i < m; i ++)
    {
        scanf("%d%d", &u, &v);
        dis[v].insert(u);
    }


    for(int i = 1; i <= n[3]; i ++)
    {
        for(int j = 1; j <= n[2]; j ++)
        {
            int k = ind[j];
            if(!dis[i].count(k))
            {
                if(cost[2][k] != INF)
                cost[3][i] = d[i] + cost[2][k];
                break;
            }
        }
        //cout<<cost[3][i]<<endl;
        dis[i].clear();
    }

    for(int i = 1; i <= n[3]; i ++)
        ind[i] = i;

    sort(ind + 1, ind + 1 + n[3], cmp3);
    int k = ind[1];
    if(cost[3][k] != INF)
        printf("%lld\n", cost[3][k]);
    else
        printf("-1\n");


    return 0;
}
