#include using namespace std; #include using namespace atcoder; int main(){ int X, Y, Z; cin >> Z >> Y >> X; vector 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 = convolution(SW, TB); auto Q = convolution(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; }