import sys
def main():
data = sys.stdin.buffer.read().split()
n, m, k = map(int, data[:3])
grid = data[3:3 + n]
size = n * m
parent = list(range(size))
def find(x):
while parent[x] != x:
parent[x] = parent[parent[x]]
x = parent[x]
return x
def union(a, b):
ra = find(a)
rb = find(b)
if ra != rb:
parent[rb] = ra
for r in range(n):
for c in range(m):
color = grid[r][c]
if color == ord('B'):
continue
idx = r * m + c
if r > 0 and grid[r - 1][c] == color:
union(idx, idx - m)
if c > 0 and grid[r][c - 1] == color:
union(idx, idx - 1)
component = [0] * size
ids = {}
next_id = 0
for i in range(size):
r, c = divmod(i, m)
if grid[r][c] == ord('B'):
component[i] = next_id
next_id += 1
else:
root = find(i)
if root not in ids:
ids[root] = next_id
next_id += 1
component[i] = ids[root]
per_layer = 2 * (n + m)
for r in range(n):
for c in range(m):
i = r * m + c
if r + 1 < n and component[i] != component[i + m]:
per_layer += 1
if c + 1 < m and component[i] != component[i + 1]:
per_layer += 1
blue_count = sum(row.count(b'B') for row in grid)
between_layers = size - blue_count
answer = k * per_layer + 2 * size + (k - 1) * between_layers
print(answer)
if __name__ == "__main__":
main()