#include<iostream>
#include<string>
#include<set>
#include<algorithm>
#define N 7
#define ONE '1'
#define ZERO '0'

using namespace std;

char data[N][N][N], data_[N][N][N];

void input_init(){
  string s;
  for(int i=0; i<N; ++i){
    for(int j=0; j<N; ++j){
      if(i!=0 && i!=N-1 && j!=0 && j!=N-1) cin >> s;
      for(int k=0; k<N; ++k){
	if(i!=0 && i!=N-1 && j!=0 && j!=N-1 && k!=0 && k!=N-1)
	  data[i][j][k] = s[k-1];
	else
	  data[i][j][k] = ZERO;
	data_[i][j][k] = ZERO;
      }
    }
  }
}

void input_map(set<int>* a){
  a->clear();
  int m, x;
  cin >> m;
  for(int i=0; i<m; ++i){
    cin >> x;
    a->insert(x);
  }
}

void output(){
  for(int i=1; i<N-1; ++i){
    for(int j=1; j<N-1; ++j){
      for(int k=1; k<N-1; ++k){
	cout << data[i][j][k];
      }
      cout << endl;
    }
    if(i != N-2) cout << endl;
  }
}

void copy(){
  for(int i=0; i<N; ++i){
    for(int j=0; j<N; ++j){
      for(int k=0; k<N; ++k){
	data[i][j][k] = data_[i][j][k];
      }
    }
  }
}

int counter(int n, int m, int l){
  int num=0;
  for(int i=n-1; i<=n+1; ++i){
    for(int j=m-1; j<=m+1; ++j){
      for(int k=l-1; k<=l+1; ++k){
	if(i==n && j==m && k==l) continue;
	if(data[i][j][k] == ONE) ++num;
      }
    }
  }
  return num;
}

void solve(set<int>& a, set<int>& b){
  int num;
  for(int i=1; i<N-1; ++i){
    for(int j=1; j<N-1; ++j){
      for(int k=1; k<N-1; ++k){
	num = counter(i, j, k);
	if(data[i][j][k] == ZERO){
	  if(a.find(num) != a.end()) data_[i][j][k] = ONE;
	  else data_[i][j][k] = ZERO;
	}else{
	  if(b.find(num) != b.end()) data_[i][j][k] = ONE;
	  else data_[i][j][k] = ZERO;
	}
      }
    }
  }
  copy();
}

int main(){
  int n, num=1;
  set<int> a, b;
  while(1){
    cin >> n;
    if(!n) break;
    input_init();
    input_map(&a);
    input_map(&b);
    for(int i=0; i<n; ++i) solve(a, b);
    if(num != 1) cout << endl;
    cout << "Case " << num << ":" << endl;
    output();
    ++num;
  }
  return 0;
}