#include<bits/stdc++.h>
using namespace std;
map<string,int> name,tod;
bool think[101][101][3],td[101][8];
int reall[101];
string cn[101],ans="Impossible";
void read(){
char s=getchar();
string nam="",f="";
while(s!=':') nam+=s,s=getchar();
int p=name[nam];
s=getchar();
s=getchar();
while(s!='\n'){
f+=s;
s=getchar();
if(name[f]){
int g=name[f];
f="";
s=getchar();
while(s!='\n'){
f+=s;
s=getchar();
}
if(f=="is guilty.") think[p][g][1]=1;//1存认为是,0存不认为是
if(f=="is not guilty.") think[p][g][0]=1;
return;
}
if(f=="Today is "){
f="";
while(s!='\n'){
f+=s;
s=getchar();
}
td[p][tod[f]]=1;
return;
}
}
if(f=="I am guilty.") think[p][p][1]=1;
if(f=="I am not guilty.") think[p][p][0]=1;
return;
}
string readword(){
string f="";
char s;
s=getchar();
while(s!='\n'){
f+=s;
s=getchar();
}
return f;
}
int main(){
tod["Sunday."]=1;
tod["Monday."]=2;
tod["Tuesday."]=3;
tod["Wednesday."]=4;
tod["Thursday."]=5;
tod["Friday."]=6;
tod["Saturday."]=7;
int n,m,p;
string num;
cin>>n>>m>>p;
getchar();
for(int i=1;i<=n;i++){
cn[i]=readword();
name[cn[i]]=i;
}
for(int i=1;i<=p;i++) read();
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(think[i][j][1]) cout<<1;
else if(think[i][j][0]) cout<<2;
else cout<<0;
}cout<<endl;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=7;j++){
cout<<td[i][j];
}cout<<endl;
}
*/
for(int kil=1;kil<=n;kil++){
for(int today=1;today<=7;today++){
bool fl=1;
int fals=0,unk=0;
// cout<<kil<<' '<<today<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=7;j++){
if(td[i][j]){
if(j==today){//1代表真话,2代表假话,下同
if(reall[i]!=2) reall[i]=1;
else fl=0;
}else{
if(reall[i]!=1) reall[i]=2;
else fl=0;
}
}
}
for(int j=1;j<=n;j++){
if((think[i][j][1]&&j==kil)||(think[i][j][0]&&j!=kil)){
if(reall[i]!=2) reall[i]=1;
else fl=0;
}
if((think[i][j][1]&&j!=kil)||(think[i][j][0]&&j==kil)){
if(reall[i]!=1) reall[i]=2;
else fl=0;
}
}
if(reall[i]==2) fals++;
if(reall[i]==0) unk++;
}
if(fals<=m&&fals+unk>=m&&fl){
if(ans!="Impossible"&&ans!=cn[kil]){
cout<<"Cannot Determine";
return 0;
}
ans=cn[kil];
}
}
}
cout<<ans<<endl;
}