H, W, M = map(int, input().split()) S = [input() for _ in range(H)] si = sj = -1 gi = gj = -1 for i in range(H): for j in range(W): if S[i][j] == 'S': si, sj = i, j elif S[i][j] == 'G': gi, gj = i, j from collections import deque dp = [[[-1] * W for _ in range(H)] for _ in range(M + 1)] dp[0][si][sj] = 0 que = deque([(0, si, sj)]) di, dj = [1, 0, -1, 0], [0, 1, 0, -1] while que: m, i, j = que.popleft() for d in range(4): ni, nj = i + di[d], j + dj[d] if 0 <= ni < H and 0 <= nj < W and S[ni][nj] != '#': if S[ni][nj].isnumeric(): # 鍵 nm = int(S[ni][nj]) elif S[ni][nj].isalpha() and S[ni][nj].islower(): if ord(S[ni][nj]) == ord('a') + m - 1: # 扉 nm = m else: continue else: nm = m if dp[nm][ni][nj] == -1: dp[nm][ni][nj] = dp[m][i][j] + 1 que.append((nm, ni, nj)) ans = -1 for m in range(M + 1): if dp[m][gi][gj] != -1: if ans == -1 or ans > dp[m][gi][gj]: ans = dp[m][gi][gj] print(ans)