#include<bits/stdc++.h>
using namespace std;
int n,m,c,d,e,h,si,sj,sh,sm,ss,lh,lm,ls,step;
double Long;
char b,f;
const int lsm[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
map<int,bool>msex;
map<int,int>sunnyrun;
struct Node{
int name,score,pactice;
bool sex;
}a[10001];
struct lr{
int MM,DD,hh,mm,ss;
};
map<int,lr>mlr;
bool cmp(Node x,Node y){
return x.name<y.name;
}
int cal(int a,int b,int c){return a*3600+b*60+c;}
int longrun(int a,int b,bool Sex){
int w=a*60+b;
if(!Sex){
if(w<=750) return 20;
if(w<=780) return 18;
if(w<=810) return 16;
if(w<=840) return 14;
if(w<=870) return 12;
if(w<=910) return 10;
if(w<=950) return 8;
if(w<=990) return 6;
if(w<=1030) return 4;
if(w<=1080) return 2;
}
else{
if(w<=400) return 20;
if(w<=417) return 18;
if(w<=434) return 16;
if(w<=451) return 14;
if(w<=470) return 12;
if(w<=485) return 10;
if(w<=500) return 8;
if(w<=515) return 6;
if(w<=530) return 4;
if(w<=540) return 2;
}
return 0;
}
int sunnylr(int x){
if(x>=21) return 10;
if(x>=19) return 9;
if(x>=17) return 8;
if(x>=14) return 7;
if(x>=11) return 6;
if(x>=7) return 4;
if(x>=3) return 2;
return 0;
}
int jihua(int x){
if(x>=18) return 5;
if(x>=15) return 4;
if(x>=12) return 3;
if(x>=9) return 2;
if(x>=6) return 1;
return 0;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].name);
cin>>b;
scanf("%d%d\'%d\"",&c,&d,&e);
cin>>f;
scanf("%d%d",&h,&a[i].pactice);
if(b=='M') a[i].sex=0,msex[a[i].name]=0;
else a[i].sex=1,msex[a[i].name]=0;
a[i].score=c+h+longrun(d,e,a[i].sex);
if(f=='P') a[i].score+=10;
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d:%d:%d%d:%d:%d%lf%d\'%d\"%d",&sj,&si,&sh,&sm,&ss,&lh,&lm,&ls,&Long,&d,&e,&step);
if(!msex[si]&&Long<3.0||msex[si]&&Long<1.5||Long*1000.0/(cal(lh,lm,ls)-cal(sh,sm,ss))<2||Long*1000.0/(cal(sh,sm,ss)-cal(lh,lm,ls))>5||d*60+e>270||Long*1000.0/step>1.5) continue;
if(mlr.find(si)==mlr.end()){
sunnyrun[si]++;
mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
continue;
}
if((sj-20170000)/100!=mlr[si].MM){
if((sj-20170000)/100-1!=mlr[si].MM){
sunnyrun[si]++;
mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
continue;
}
else{
if(sj%100!=1||mlr[si].DD!=lsm[mlr[si].MM]){
sunnyrun[si]++;
mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
continue;
}
else if(86400+cal(lh,lm,ls)-cal(sh,sm,ss)<21600)continue;
}
}
else if(sj%100!=mlr[si].DD){
if(sj%100-1!=mlr[si].DD){
sunnyrun[si]++;
mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
continue;
}
else if(86400+cal(lh,lm,ls)-cal(sh,sm,ss)<21600)continue;
}
else if(cal(lh,lm,ls)-cal(sh,sm,ss)<21600) continue;
sunnyrun[si]++;
mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
}
for(int i=1;i<=n;i++) a[i].score+=sunnylr(sunnyrun[a[i].name])+jihua(sunnyrun[a[i].name]+a[i].pactice);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].name<<' '<<a[i].score<<' ';
if(a[i].score>=95) printf("A\n");
else if(a[i].score>=90) printf("A-\n");
else if(a[i].score>=85) printf("B+\n");
else if(a[i].score>=80) printf("B\n");
else if(a[i].score>=77) printf("B-\n");
else if(a[i].score>=73) printf("C+\n");
else if(a[i].score>=70) printf("C\n");
else if(a[i].score>=67) printf("C-\n");
else if(a[i].score>=63) printf("D+\n");
else if(a[i].score>=60) printf("D\n");
else printf("F\n");
}
return 0;
}