#include "bits/stdc++.h"
#define ll long long
#define ff first
#define ss second
using namespace std;
const int N = 505;
const int K = 22;
const ll inf = 1e15;
int n,m,k;
ll s[K],dt[K][K];
ll dp[1<<K];
char a[N][N];
int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
ll bfs(int sx,int sy,int fx,int fy){
queue <pair<int,int>> q;
vector <vector <ll>> d(n,vector <ll> (m,-1));
q.push({sx,sy});
d[sx][sy] = 0;
while (!q.empty()){
int x = q.front().ff,y = q.front().ss;
q.pop();
if (x == fx && y == fy)
return d[x][y];
for (int i = 0;i < 4;i++){
int nx = x + dx[i],ny = y+dy[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= m)
continue;
if (a[nx][ny] == '#')
continue;
if (~d[nx][ny])
continue;
d[nx][ny] = d[x][y]+1;
q.push({nx,ny});
}
}
return d[fx][fy];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> k;
int sx = -1,sy = -1;
vector <pair<int,int>> c;
for (int i = 0;i < n;i++){
for (int j = 0;j < m;j++){
cin >> a[i][j];
if (a[i][j] == 'S')
sx = i,sy = j;
if (a[i][j] == 'X')
c.push_back({i,j});
}
}
for (int i = 0;i < k;i++){
s[i] = bfs(sx,sy,c[i].ff,c[i].ss);
for (int j = i+1;j < k;j++){
dt[i][j] = dt[j][i] = bfs(c[i].ff,c[i].ss,c[j].ff,c[j].ss);
}
}
fill(dp,dp+(1<<k),inf);
dp[0] = 0;
for (int mask = 0;mask < (1<<k);mask++){
if (dp[mask] == inf)
continue;
for (int i = 0;i < k;i++){
if (mask&(1<<i))
continue;
if (~s[i]){
int nm = mask | (1<<i);
dp[nm] = min(dp[nm],dp[mask]+2*s[i]);
}
for (int j = i+1;j < k;j++){
if (mask & (1<<j))
continue;
if (~s[i] && ~s[j] && ~dt[i][j]){
int nm = mask | (1<<i) | (1<<j);
ll h = min(s[i]+dt[i][j]+s[j],s[j]+dt[j][i]+s[i]);
dp[nm] = min(dp[nm],dp[mask]+h);
}
}
}
}
if (dp[(1<<k)-1] >= inf)
cout << "-1\n";
else cout << dp[(1<<k)-1] << "\n";
}