#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
struct polo{
int zhi;
double xi;
};
bool cmp(polo a,polo b){
return a.zhi>b.zhi;
}
int main()
{vector<polo> result;
vector<polo> result2;
int num;
cin>>num;
int zhi;
double xi;
polo temp;
for(int i=0;i<num;i++)
{
cin>>zhi>>xi;
temp.zhi=zhi;
temp.xi=xi;
result.push_back(temp);
}
int qw=result.size();
cin>>num;
for(int i=0;i<num;i++)
{
cin>>zhi>>xi;
for(int j=0;j<qw;j++)
{
temp.zhi=result[j].zhi+zhi;
temp.xi=result[j].xi*xi;
result2.push_back(temp);
}
}
sort(result2.begin(),result2.end(),cmp);
for(int i=0;i<result2.size()-1;i++)
if(result2[i].zhi==result2[i+1].zhi) {
result2[i+1].xi+=result2[i].xi;
result2.erase(result2.begin()+i);
i--; }
for(int i=0;i<result2.size();i++)
{ if(result2[i].xi==0) result2.erase(result2.begin()+i),
i--;
}
cout<<result2.size()<<" ";
for(int i=0;i<result2.size();i++)
{ printf("%d %.1lf",result2[i].zhi,result2[i].xi);
if(i<result2.size()-1) cout<<" ";
}
return 0;
}