#include <bits/stdc++.h>
#define xx xy[0]
#define yy xy[1]
using namespace std;
int ax,ay,m,n,o,p;
struct edge{
int xy[2],w;
};
void getx(vector<edge> a,vector<edge> &h,int xy,int pos)
{
h.clear();
for(int i=0;i<a.size();i++)
{
if(a[i].xy[xy]==pos)
{
int k=h.size();
h.push_back(edge{a[i].xy[1-xy],0,a[i].w});
}
}
}
int xc(vector<edge> a,vector<edge> b)
{
int i=0,j=0,res=0;
while(i<a.size()&&j<b.size())
{
if(a[i].xx==b[j].xx)
{
res+=a[i].w*b[j].w;
i++,j++;
}
while(i<a.size()&&j<b.size()&&a[i].xx<b[j].xx)i++;
while(i<a.size()&&j<b.size()&&a[i].xx>b[j].xx)j++;
}
return res;
}
void out(vector<edge> a)
{
for(int i=0;i<a.size();i++) printf("%d %d %d\n",a[i].xy[0],a[i].xy[1],a[i].w);
printf("\n");
}
void cf(vector<edge> a,vector<edge> b,vector<edge> c)
{
vector<edge> ah,bl,cl;
getx(a,ah,0,ax);
getx(c,cl,1,ay);
vector<edge> ab;
for(int i=1;i<=o;i++)
{
getx(b,bl,1,i);
int te=xc(ah,bl);
if(!te) continue;
ab.push_back(edge{i,0,te});
}
cout << xc(ab,cl) << endl;
}
int gt()
{
char a,b;
int res=0;
a=getchar();
if(a=='\n') return -1;
while(a!=' ')
{
res*=10;
res+=a-'0';
a=getchar();
}
return res;
}
void read(vector<edge> &a)
{
char x;
int te,y,w;
do{
te=gt();
if(te==-1) return;
cin >> y >> w;
x=getchar();
a.push_back(edge{te,y,w});
}while(1);
}
int main()
{
cin >> ax >> ay >> m >> n >> o >> p;
char fw=getchar();
vector<edge> a,b,c;
read(a);
read(b);
read(c);
cf(a,b,c);
return 0;
}