#include<bits/stdc++.h>
using namespace std;
int main()
{
int n1,n2,m1,m2,m3=0,data1[110][5],data2[110][5],data3[10010][5];
int symbol=1,num=0;
scanf("%d%d",&n1,&m1);
for(int i=1;i<=m1;i++) scanf("%d%d%d",&data1[i][1],&data1[i][2],&data1[i][3]);
scanf("%d%d",&n2,&m2);
for(int i=1;i<=m2;i++) scanf("%d%d%d",&data2[i][1],&data2[i][2],&data2[i][3]);
for(int i=1;i<=m2;i++)
{
for(int j=1;j<=m1;j++)
{
if(data2[i][1]==data1[j][2])
{
for(int k=1;k<=num;k++) if(data1[j][1]==data3[k][1]&&data2[i][2]==data3[k][2])
{
symbol=0;
data3[k][3]+=(data1[j][3]*data2[i][3]);
}
if(symbol==1)
{
num++;
data3[num][1]=data1[j][1];
data3[num][2]=data2[i][2];
data3[num][3]=data1[j][3]*data2[i][3];
}
}
symbol=1;
}
}
for(int i=1;i<num;i++)
{
for(int j=1;j<=num-i;j++)
{
if(data3[j][1]>data3[j+1][1]||(data3[j][1]==data3[j+1][1]&&data3[j][2]>data3[j+1][2]))
{
swap(data3[j][1],data3[j+1][1]);
swap(data3[j][2],data3[j+1][2]);
swap(data3[j][3],data3[j+1][3]);
}
}
}
for(int i=1;i<=num;i++)
{
if(data3[i][3])
{
m3++;
}
}
printf("%d %d",n1,m3);
for(int i=1;i<=num;i++)
{
if(data3[i][3])
{
printf("\n%d %d %d",data3[i][1],data3[i][2],data3[i][3]);
}
}
return 0;
}