#include using namespace std; typedef vector vl; typedef complex C; void fft(vector& F, bool inv) { const double PI = acos(-1.); for (int x = 1; x < F.size(); x <<= 1) { vector G = F; int d = F.size() / (2 * x); for (int i = 0; i < F.size() / 2; i++) { auto u = F[i + i / d * d], v = F[i + i / d * d + d]; G[i] = u + v * polar(1., (inv ? -1 : 1) * PI * (i / d) / x); G[i + F.size() / 2] = u - v * polar(1., (inv ? -1 : 1) * PI * (i / d) / x); } F = G; } if (inv) for(auto& v : F) v /= F.size(); } vl conv(const vl& f,const vl& g) { if (f.empty() || g.empty()) return {}; int n = 1; while (n <= f.size() + g.size()) n <<= 1; vector F(n), G(n); for (int i = 0; i < f.size(); i++) F[i] = f[i]; for (int i = 0; i < g.size(); i++) G[i] = g[i]; fft(F, false); fft(G, false); vector H(n); for (int i = 0; i < n; i++) H[i] = F[i] * G[i]; fft(H, true); vl h(f.size() + g.size() - 1); for (int i = 0; i < h.size(); i++) h[i] = round(H[i].real()); return h; } int main(){ int X, Y, Z; cin >> Z >> Y >> X; vl SB(8 * X * Y * Z), SW(8 * X * Y * Z), TB(8 * X * Y * Z), TW(8 * X * Y * Z); for (int x = 0; x < X; x++) { for (int y = 0; y < Y; y++) { string S; cin >> S; for (int z = 0; z < Z; z++) { int t = z + 2 * Z * y + 4 * Y * Z * x; if (S[z] == 'B') { SB[t] = 1; SB[t + Z] = 1; SB[t + 2 * Y * Z] = 1; SB[t + 2 * Y * Z + Z] = 1; SB[t + 4 * X * Y * Z] = 1; SB[t + 4 * X * Y * Z + Z] = 1; SB[t + 4 * X * Y * Z + 2 * Y * Z] = 1; SB[t + 4 * X * Y * Z + 2 * Y * Z + Z] = 1; } if (S[z] == 'W') { SW[t] = 1; SW[t + Z] = 1; SW[t + 2 * Y * Z] = 1; SW[t + 2 * Y * Z + Z] = 1; SW[t + 4 * X * Y * Z] = 1; SW[t + 4 * X * Y * Z + Z] = 1; SW[t + 4 * X * Y * Z + 2 * Y * Z] = 1; SW[t + 4 * X * Y * Z + 2 * Y * Z + Z] = 1; } } } } for (int x = 0; x < X; x++) { for (int y = 0; y < Y; y++) { string T; cin >> T; for (int z = 0; z < Z; z++) { int t = z + 2 * Z * y + 4 * Y * Z * x; if (T[z] == 'B') TB[t] = 1; if (T[z] == 'W') TW[t] = 1; } } } reverse(TB.begin(), TB.end()); reverse(TW.begin(), TW.end()); auto P = conv(SW, TB); auto Q = conv(SB, TW); int ans = X * Y * Z; for (int x = 0; x < X; x++) { for (int y = 0; y < Y; y++) { for (int z = 0; z < Z; z++) { int t = z + 2 * Z * y + 4 * Y * Z * x; t += 8 * X * Y * Z - 1; ans = min(ans, int(P[t] + Q[t])); } } } cout << ans << endl; return 0; }