#include <iostream>
#include <bits/stdc++.h>
#include <math.h> 

using namespace std;
#define gc getchar_unlocked
#define fo(i,n) for(ll i=0;i<n;i++)
#define Fo(i,k,n) for(ll i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
#define ll long long
#define si(x)	scanf("%d",&x)
#define sl(x)	scanf("%lld",&x)
#define ss(s)	scanf("%s",s)
#define pi(x)	printf("%d\n",x)
#define pl(x)	printf("%lld\n",x)
#define ps(s)	printf("%s\n",s)
#define deb(x) cout << #x << "=" << x << endl
#define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define clr(x) memset(x, 0, sizeof(x))
#define sortall(x) sort(all(x))
#define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
#define PI 3.1415926535897932384626
#define ms(a,x) memset(a, x, sizeof(a));
typedef pair<int, int>	pii;
typedef pair<ll, ll>	pl;
typedef vector<int>		vi;
typedef vector<ll>		vl;
typedef vector<pii>		vpii;
typedef vector<pl>		vpl;
typedef vector<vi>		vvi;
typedef vector<vl>		vvl;
int mpow(int base, int exp); 
void ipgraph(int m);
void dfs(int u, int par);
const int mod = 1000000007;
const int N = 3e5, M = N;


// int n;
// pii A[1010][1010];
// char ans[1010][1010];
 
// void dfs(int x, int y){
// 	if (A[x+1][y] == A[x][y] && !ans[x+1][y]){
// 		ans[x+1][y] = 'U';
// 		if (!ans[x][y]) ans[x][y] = 'D';
// 		dfs(x+1, y);
// 	}
// 	if (A[x-1][y] == A[x][y] && !ans[x-1][y]){
// 		ans[x-1][y] = 'D';
// 		if (!ans[x][y]) ans[x][y] = 'U';
// 		dfs(x-1, y);
// 	}
// 	if (A[x][y-1] == A[x][y] && !ans[x][y-1]){
// 		ans[x][y-1] = 'R';
// 		if (!ans[x][y]) ans[x][y] = 'L';
// 		dfs(x, y-1);
// 	}
// 	if (A[x][y+1] == A[x][y] && !ans[x][y+1]){
// 		ans[x][y+1] = 'L';
// 		if (!ans[x][y]) ans[x][y] = 'R';
// 		dfs(x, y+1);
// 	}
// }
 
// int main(){
// 	#ifndef ONLINE_JUDGE
// 	freopen("input.txt","r",stdin);
// 	freopen("output.txt","w",stdout);
// 	#endif

// 	scanf("%d", &n);
// 	for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) scanf("%d %d", &A[i][j].first, &A[i][j].second);
// 	for (int i=1; i<=n; i++) for (int j=1; j<=n; j++){
// 		if (ans[i][j]) continue;
// 		if (A[i][j] == pii(-1,-1)) dfs(i,j);
// 		if (A[i][j] == pii(i,j)){
// 			ans[i][j] = 'X';
// 			dfs(i, j);
// 		}
// 	}
// 	for (int i=1; i<=n; i++) for (int j=1; j<=n; j++){
// 		if (!ans[i][j]){
// 			puts("INVALID");
// 			return 0;
// 		}
// 	}
// 	puts("VALID");
// 	for (int i=1; i<=n; i++) puts(ans[i]+1);
// 	return 0;
// }

// struct Museum{
// 	int cost;
// 	int outside_museum;
// 	Museum(int cost,int outside_museum):: cost(cost), outside_museum(outside_museum) 
//     { 
//     } 
// };

// struct CompareHeight { 
//     bool operator()(Museum const& p1, Museum const& p2) 
//     { 
//         // return "true" if "p1" is ordered  
//         // before "p2", for example: 
//         return p1.cost < p2.cost; 
//     } 
// }; 


// void fn(){
// 	priority_queue<Museum, vector<Museum>, CompareHeight> Q;
// 	unordered_map<int,int> cost_to_museum;

// 	while(!queue.empty()){
// 		Museum temp = q.top();
// 		if( cost_to_museum.find(temp.outside_museum)==cost_to_museum.end()){
// 			cost_to_museum[temp.outside_museum] = temp.cost;
// 			for(auto i:graph[temp.outside_museum]){
// 				//Museum X = Person(arr[i][0], arr[i][1])
// 				Q.push(Museum(cost_to_museum[temp.outside_museum]+cost[i][temp.outside_museum], i))
// 			}
// 		}

// 	}
	
// }
int main(){
	

	vector<vector<int>> v(3,vector<int>(3,0));
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			cin>>v[i][j];
		}
	}
	int n;cin>>n;
	while(n--){
		int x;cin>>x;
		//cout<<x<<endl;
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++){

				if(v[i][j]==x){
					//cout<<x<<endl;
					v[i][j]=-1;
				}
			}
		}
	}
	int ans = 0;
	for(int i=0;i<3;i++){
		bool flag = 0;
		for(int j=0;j<3;j++){
			if(v[i][j]!=-1){
				flag=1;
			}
		}
		if(flag==0){
			ans= 1;
			break;
		}
	}
	for(int j=0;j<3;j++){
		bool flag = 0;
		for(int i=0;i<3;i++){
			if(v[i][j]!=-1){
				flag=1;
			}
		}
		if(flag==0){
			ans= 1;
			break;
		}
	}
	// for(int i=0;i<3;i++){
	// 	for(int j=0;j<3;j++){
	// 		cout<<v[i][j]<<" ";
	// 	}
	// 	cout<<endl;
	// }
	if(v[0][0]==-1 && v[1][1]==-1 && v[2][2]==-1) ans = 1;
	if(v[0][2]==-1 && v[1][1]==-1 && v[2][0]==-1) ans = 1;
	if(ans == 1){
		cout<<"Yes"<<endl;
	}
	else{
		cout<<"No"<<endl;
	}
	

	return 0;
}

Measured memory_bytes: 256