#include <stdio.h>
#include <string.h>
int A[10][10],B[10][10];
int vary[10];
bool flag[10];
int small1,small2,min;
void action(int n)
{
    int i,j,val=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(A[vary[i]][vary[j]]==B[i][j])    continue;
            if(A[vary[i]][vary[j]])
                val+=small2;
            else
                val+=small1;
        }
    }
    if(val<min)    min=val;
}
void DFS(int pos,int n)
{
    int i;
    if(pos==n)    {action(n);    return ; }
    for(i=0;i<n;i++)
    {
        if(flag[i])
        {
            vary[pos]=i;
            flag[i]=false;
            DFS(pos+1,n); 
            flag[i]=true;
        }
    }
}
void solve()
{
    int n,Ma,Mb,Ia,Ib,Da,Db;
    int i,a,b,cas=0;
    while(scanf("%d %d %d",&n,&Ma,&Mb) && n)
    {
        scanf("%d %d %d %d",&Ia,&Ib,&Da,&Db);
        small1=(Ia<Db?Ia:Db);
        small2=(Ib<Da?Ib:Da);
        min=0xfffffff;
        memset(A,0,sizeof(A));
        memset(B,0,sizeof(B));
        for(i=0;i<Ma;i++)
        {
            scanf("%d %d",&a,&b);
            A[a][b]=A[b][a]=1;
        }
        for(i=0;i<Mb;i++)
        {
            scanf("%d %d",&a,&b);
            B[a][b]=B[b][a]=1;
        }
        for(i=0;i<n;i++)    flag[i]=true;
        DFS(0,n);
        printf("Case #%d: %d\n",++cas,min/2);
    }
}
int main()
{
    solve();
    return 0;
}