0pts
#include<bits/stdc++.h>
using namespace std;
int m,n,p;
string xq[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
map<string,int> name;
vector<pair<int,string>> zy;
bool pd(int zf,string s)
{
if(s=="I am guilty.") return zf==1;
if(s=="I am not guilty.") return zf!=1;
if(s.find(" is guilty.")!=string::npos)
{
string t=s.substr(0,s.find(" is guilty."));
return name[t]==1;
}
if(s.find(" is not guilty.")!=string::npos)
{
string t=s.substr(0,s.find(" is not guilty."));
return name[t]!=1;
}
if(s.find("Today is ")!=string::npos)
{
string t=s.substr(9,s.find(".")-9);
for(int i=0;i<7;i++) if(t==xq[i]) return i+1==zf;
}
return 1;
}
int main()
{
cin>>m>>n>>p;
for(int i=1;i<=m;i++)
{
string s;cin>>s;
name[s]=0;
}
cin.ignore();
for(int i=0;i<p;i++)
{
string s;getline(cin,s);
int pos=s.find(": ");
string nm=s.substr(0,pos);
string z=s.substr(pos+2);
zy.push_back({name[nm],z});
}
vector<string> ans;
for(auto &x:name)
{
for(int d=1;d<=7;d++)
{
int jsh=0;
for(auto &y:name) y.second=0;
x.second=1;
int jj=0;
for(auto z:zy)
{
if(!pd(d,z.second))
{
if(z.first==0) jj++;
else jsh++;
}
}
if(jj<=n && jsh==n-jj) ans.push_back(x.first);
}
}
sort(ans.begin(),ans.end());
ans.erase(unique(ans.begin(),ans.end()),ans.end());
if(ans.size()==1) cout<<ans[0];
else if(ans.empty()) cout<<"Impossible";
else cout<<"Cannot Determine";
return 0;
}