#include<bits/stdc++.h>
using namespace std;
const int N=1e4+9;
set<string>s[N],in;
struct node
{
string name;
double p;
bool operator <(const node &x)const{
return p>x.p;
}
}ta[N],tb[N];
int sexa,sexb;
int main(){
int n,m;
cin>>n>>m;
for(int j=1;j<=m;j++){
int k;
cin>>k;
for(int i=1;i<=k;i++){
string p;
cin>>p;
in.insert(p);
s[j].insert(p);
}
}
string a,b;
cin>>a>>b;
int A = abs(stoi(a)), B = abs(stoi(b));
if(a[0]=='-')sexa=1;
if(b[0]=='-')sexb=1;
double mxa=0,mxb=0;
for(int i=1;i<=m;i++){
if(s[i].find(a)!=s[i].end()||s[i].find(b)!=s[i].end()){
int checka=0,checkb=0;
if(s[i].find(a)!=s[i].end())checka=1;
if(s[i].find(b)!=s[i].end())checkb=1;
for(auto it:s[i]){
int nea=0,neb=0;
int p=abs(atoi(it.c_str()));
if(it[0]=='-'){
nea=1;
}
if(nea!=sexa&&checka){
ta[p].name=it;
ta[p].p+=1.0/s[i].size();
mxa=max(ta[p].p,mxa);
}
if(nea!=sexb&&checkb){
tb[p].name=it;
tb[p].p+=1.0/s[i].size();
mxb=max(tb[p].p,mxb);
}
}
}
}
vector<string>ansa,ansb;
double pa=ta[0].p,pb=tb[0].p;
int oka=0,okb=0;
if(ta[B].p==mxa&&tb[A].p==mxb){
cout<<a<<" "<<b<<"\n";
return 0;
}
for(auto it:ta){
if(mxa==it.p&&mxa>0){
ansa.push_back(it.name);
if(it.name==b)oka=1;
}
}
for(auto it:tb){
if(mxb==it.p&&mxb>0){
ansb.push_back(it.name);
if(it.name==a)okb=1;
}
}
for(auto it:ansa){
cout<<a<<" "<<it<<"\n";
}
for(auto it:ansb){
cout<<b<<" "<<it<<"\n";
}
return 0;
}