#include<bits/stdc++.h>
using namespace std;

#define MAX 100002

int n;

vector<int> v[MAX];
struct BIT{
	vector<int> bit;
	void resize(int N){
		bit.assign(N, 0);
	}
	void add(int i, int j){
		i++;
		while (i < bit.size()){
			bit[i] += j;
			i += i&-i;
		}
	}
	int sum(int i){
		int r = 0;
		i++;
		while (i){
			r += bit[i];
			i -= i&-i;
		}
		return r;
	}
	int rng(int lef, int rig){
		int F = sum(rig);
		if (lef){
			F -= sum(lef - 1);
		}
		return F;
	}
};
BIT bit;
bool par(vector<int> &vv){
	bit.resize(300002);
	int sum = 0;
	for (int i = 0; i < vv.size(); i++){
		sum += i - bit.sum(vv[i]);
		bit.add(vv[i], 1);
		sum %= 2;
	}
	return sum;
}
vector<bool> inv;
int main(){
	cin >> n;
	for (int i = 0; i < 3; i++){
		for (int j = 0; j < n; j++){
			int a;
			scanf("%d", &a);
			v[j].push_back(a);
		}
	}
	for (int j = 0; j < n; j++){
		if (v[j][1] % 3 != 2){
			puts("No");
			return 0;
		}
		if (abs(v[j][0] - v[j][1]) != 1){
			puts("No");
			return 0;
		}
		if (abs(v[j][1] - v[j][2]) != 1){
			puts("No");
			return 0;
		}
		int ex = 2;
		if (j % 2){
			ex = 5;
		}
		if (v[j][1] % 6 != ex){
			puts("No");
			return 0;
		}
		inv.push_back(v[j][0] > v[j][1]);
	}
	vector<int> k[2];
	int cc[] = { 0, 0 };
	for (int i = 0; i < n; i++){
		k[i % 2].push_back(v[i][1]);
		cc[i % 2] += inv[i];
	}
	cc[0] %= 2;
	cc[1] %= 2;
	if (par(k[0]) == cc[1] && par(k[1]) == cc[0]){
		puts("Yes");
	}
	else{
		puts("No");
	}
	return 0;
}