#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 = 1e16;
int n,m,k;
char a[N][N];
ll dp[1<<K];
ll s[K];
ll dt[K][K];
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;
int i = 0;
for (;i < k && mask & (1<<i);i++){
}
if (i == k)
continue;
int nm = mask | (1<<i);
if (~s[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[j] && ~dt[i][j]){
int nm = mask | (1<<i) | (1<<j);
ll h = dt[i][j] + s[i] + s[j];
dp[nm] = min(dp[nm],dp[mask]+h);
}
}
}
if (dp[(1<<k)-1] >= inf)
cout << "-1\n";
else cout << dp[(1<<k)-1] << "\n";
}