#include<iostream> int i,j,k,l,m,n,np,nc,s,t,u,v,q,map[120][120],ans,lev[120],que[1000]; bool bfs(int s,int t)
{
int i,j,k,head=0,tail=1,now;
memset(lev,0xFF,sizeof(lev));
lev[s]=0; que[0]=s;
while (head<tail)
{
now=que[head];
if (now==t) return true;
for (i=0;i<=t;i++)
{
if ((map[now][i]>0)&&(lev[i]==-1))
{
lev[i]=lev[now]+1;
que[tail++]=i;
}
}
head++;
}
return false;
} int dinic(int s,int t)
{
int i,k,u,v,now,f,MaxFlow=0,Stnow[120],lef[120],pre[120];
while (bfs(s,t))
{
memset(Stnow,0,sizeof(Stnow));
memset(lef,0x7F,sizeof(lef));
u=s;
while (true)
{
for (v=Stnow[u];v<=t;v++)
if ((map[u][v]>0)&&(lev[v]==lev[u]+1)) break;
if (v<=t)
{
pre[v]=u;
Stnow[u]=v+1;
lef[v]=lef[u]<map[u][v]?lef[u]:map[u][v];
u=v;
if (v==t)
{
now=t; f=lef[t]; MaxFlow+=f;
while (now!=s)
{
map[pre[now]][now]-=f; map[now][pre[now]]+=f;
lef[now]-=f;
if (map[pre[now]][now]==0) u=pre[now];
now=pre[now];
}
}
}
else
{
if (u!=s)
{
lev[u]=INT_MAX; u=pre[u];
}
else break;
}
}
}
return MaxFlow;
} int main()
{
while (scanf("%d%d%d",&n,&np,&nc)!=EOF)
{
memset(map,0,sizeof(map));
scanf("%d",&m);
for (i=1;i<=m;i++)
{
scanf(" (%d,%d)%d",&u,&v,&q);
map[u][v]=q;
}
for (i=1;i<=np;i++)
{
scanf(" (%d)%d",&u,&q);
map[n+1][u]=q;
}
for (i=1;i<=nc;i++)
{
scanf(" (%d)%d",&u,&q);
map[u][n+2]=q;
}
ans=dinic(n+1,n+2);
printf("%d",ans);
}
}
{
int i,j,k,head=0,tail=1,now;
memset(lev,0xFF,sizeof(lev));
lev[s]=0; que[0]=s;
while (head<tail)
{
now=que[head];
if (now==t) return true;
for (i=0;i<=t;i++)
{
if ((map[now][i]>0)&&(lev[i]==-1))
{
lev[i]=lev[now]+1;
que[tail++]=i;
}
}
head++;
}
return false;
} int dinic(int s,int t)
{
int i,k,u,v,now,f,MaxFlow=0,Stnow[120],lef[120],pre[120];
while (bfs(s,t))
{
memset(Stnow,0,sizeof(Stnow));
memset(lef,0x7F,sizeof(lef));
u=s;
while (true)
{
for (v=Stnow[u];v<=t;v++)
if ((map[u][v]>0)&&(lev[v]==lev[u]+1)) break;
if (v<=t)
{
pre[v]=u;
Stnow[u]=v+1;
lef[v]=lef[u]<map[u][v]?lef[u]:map[u][v];
u=v;
if (v==t)
{
now=t; f=lef[t]; MaxFlow+=f;
while (now!=s)
{
map[pre[now]][now]-=f; map[now][pre[now]]+=f;
lef[now]-=f;
if (map[pre[now]][now]==0) u=pre[now];
now=pre[now];
}
}
}
else
{
if (u!=s)
{
lev[u]=INT_MAX; u=pre[u];
}
else break;
}
}
}
return MaxFlow;
} int main()
{
while (scanf("%d%d%d",&n,&np,&nc)!=EOF)
{
memset(map,0,sizeof(map));
scanf("%d",&m);
for (i=1;i<=m;i++)
{
scanf(" (%d,%d)%d",&u,&v,&q);
map[u][v]=q;
}
for (i=1;i<=np;i++)
{
scanf(" (%d)%d",&u,&q);
map[n+1][u]=q;
}
for (i=1;i<=nc;i++)
{
scanf(" (%d)%d",&u,&q);
map[u][n+2]=q;
}
ans=dinic(n+1,n+2);
printf("%d",ans);
}
}