import std.stdio : write, writeln;
import std.array;
import std.range;
import std.typecons;
import std.bigint;
import std.algorithm;

void main(){
	while(true){
		int n = readln.chomp.to!int;
		if( !n )return;
		int[string] map;
		foreach(i; n.iota){
			foreach( str; readln.chomp.split){
				if( str in map ){
					++map[str];
				}else{
					map[str] = 1;
				}
			}
		}
		auto k = readln.front;
		bool[string] set;
		foreach( str; map.keys ){
			if( k == str.front ){
				set[ str ] = true;
			}
		}
		
		string[] ans;
		while( set.length > 0 ){
			int max_ = 0;
			string[] max_str;
			foreach( str; set.keys ){
				if( max_ < map[str] ){
					max_ = map[str];
					max_str = [str];
				}else if( max_ == map[str] ){
					max_str ~= str;
				}
			}
			
			max_str.sort;
			
			ans ~= max_str;
			foreach( str; max_str ){
				set.remove(str);
			}
			
			if( ans.length >= 5 ){
				ans = ans[ 0..5 ];
				break;
			}
		}
		
		bool flag = true;
		for( int i = 0; i < ans.length ; ++i ){
			if( i ){
				write = " ";
			}
			write = ans[ i ];
			flag &= false;
		}
		if( flag ) write = "NA";
		write = '\n';
	}
}

import std.stdio : readln;
import std.conv : to;
import std.string : split, chomp;
import std.traits;
string[] input;
string delim = " ";
T next(T)()
in
{
	assert(hasNext());
}
out
{
	input.popFront;
}
body
{
	return input.front.to!T;
}

T next( T : char )()
in
{
	assert(hasNext());
}
out
{
	input.front.popFront;
}
body
{
	return input.front.front.to!T;
}



bool hasNext(){
	if(input.length > 0){
		if(input.front.length == 0){
			input.popFront;
			return hasNext;
		}
		return true;
	}
	
	string str = readln;
	if(str.length > 0){
		input ~= str.chomp.split(delim);
		return hasNext;
	}else{
		return false;
	}
}


void dbg(T...)(T vs)
{
	import std.stdio : stderr;
	foreach(v; vs)
		stderr.write(v.to!string ~ " ");
	stderr.write("\n");
}

T clone(T)(T v){
	T v_;
	static if(isInputRange!(T)){
		foreach(ite; v){
			v_ ~= ite.clone;
		}
	}else{
		v_ = v;
	}
	
	return v_;
}