#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>

using namespace std;

const int N=1e5+9;

int bit[N],ans[2];
int n,g[N][3],p[N];

inline int lolbit(int x){return x&(-x);}

inline void add(int pos)
{
	for(int i=pos;i;i-=lolbit(i))
		bit[i]++;
}
inline int query(int pos)
{
	int ret=0;
	for(int i=pos;i<=N;i+=lolbit(i))
		ret+=bit[i];
	return ret;
}

inline int read()
{
	int x=0;char ch=getchar();
	while(ch<'0' || '9'<ch)ch=getchar();
	while('0'<=ch && ch<='9')x=x*10+(ch^48),ch=getchar();
	return x;
}

inline void end()
{
	puts("No");
	exit(0);
}

int main()
{
	n=read();
	for(int i=0;i<=2;i++)
		for(int j=1;j<=n;j++)
			g[j][i]=read();
	for(int i=1;i<=n;i++)
	{
		int a=g[i][0],b=g[i][1],c=g[i][2];
		if(c-b==1 && b-a==1 && c%3==0)
			p[i]=c/3;
		else if(a-b==1 && b-c==1 && a%3==0)
			p[i]=a/3,ans[i&1]^=1;
		else end();
		if((p[i]-i)&1)
			end();
	}

	for(int i=1;i<=n;i+=2)
	{
		ans[0]^=(query(p[i])&1);
		add(p[i]);
	}
	memset(bit,0,sizeof(bit));
	for(int i=2;i<=n;i+=2)
	{
		ans[1]^=(query(p[i])&1);
		add(p[i]);
	}

	if(!(ans[0]|ans[1]))
		puts("Yes");
	else end();
	return 0;
}
