unittest
{
	assert( [ "84 97 66", "79 89 11", "61 59 7", "7", "89", "7", "87", "79", "24", "84", "30" ].parse.expand.solve == "Yes" );
	assert( [ "41 7 46", "26 89 2", "78 92 8", "5", "6", "45", "16", "57", "17" ].parse.expand.solve == "No" );
	assert( [ "60 88 34", "92 41 43", "65 73 48", "10", "60", "43", "88", "11", "48", "73", "65", "41", "92", "34" ].parse.expand.solve == "Yes" );
}



import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	long[ 3 ][ 3 ] ass;
	foreach( ref as; ass )
	{
		as = input.front.split.to!( long[] );
		input.popFront;
	}
	auto n = input.front.to!( long );
	auto bs = new long[ n ];
	foreach( ref b; bs )
	{
		input.popFront;
		b = input.front.to!( long );
	}
	return tuple( ass, bs );
}

auto solve( long[ 3 ][ 3 ] ass, long[] bs )
{
	bool[ 3 ][ 3 ] css;
	foreach( y, as; ass )
	{
		foreach( x, a; as )
		{
			foreach( b; bs )
			{
				css[ y ][ x ] = ( a == b );
				if( css[ y ][ x ] ) break;
			}
		}
	}
	
	if( css[ 0 ][ 0 ] && css[ 0 ][ 1 ] && css[ 0 ][ 2 ] ) return "Yes";
	if( css[ 1 ][ 0 ] && css[ 1 ][ 1 ] && css[ 1 ][ 2 ] ) return "Yes";
	if( css[ 2 ][ 0 ] && css[ 2 ][ 1 ] && css[ 2 ][ 2 ] ) return "Yes";
	
	if( css[ 0 ][ 0 ] && css[ 1 ][ 0 ] && css[ 2 ][ 0 ] ) return "Yes";
	if( css[ 0 ][ 1 ] && css[ 1 ][ 1 ] && css[ 2 ][ 1 ] ) return "Yes";
	if( css[ 0 ][ 2 ] && css[ 1 ][ 2 ] && css[ 2 ][ 2 ] ) return "Yes";
	
	if( css[ 0 ][ 0 ] && css[ 1 ][ 1 ] && css[ 2 ][ 2 ] ) return "Yes";
	if( css[ 2 ][ 0 ] && css[ 1 ][ 1 ] && css[ 0 ][ 2 ] ) return "Yes";
	
	return "No";
}
