void solve(){
int N, M, K; cin >> N >> M >> K;
vector<vector<int>> board(N, vector<int>(M, 0));
vector<pii> students(K+1);
vector<bool> visited(K+1);
rep(i, 1, K+1){
int x, y; cin >> x >> y;
x--; y--;
students[i] = {x, y};
board[x][y] = i;
}
int S; cin >> S;
set<int> Q;
Q.insert(S);
visited[S] = true;
vector<vector<int>> links(K+1);
vector<int> dx = {-1, -1, -1, 0, 0, 1, 1, 1};
vector<int> dy = {-1, 0, 1, -1, 1, -1, 0, 1};
while(!Q.empty()){
set<int> nQ;
for(auto cur: Q){
auto [cx, cy] = students[cur];
rep(d, 0, 8){
int nx = cx + dx[d];
int ny = cy + dy[d];
if(nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
if(board[nx][ny] == 0) continue;
int nxt = board[nx][ny];
if(visited[nxt]) continue;
visited[nxt] = true;
links[cur].push_back(nxt);
nQ.insert(nxt);
}
}
swap(Q, nQ);
}
rep(i, 1, K+1) if(!visited[i]){
cout << -1;
return;
}
vector<int> sz(K+1);
function<void(int)> dfs = [&](int cur){
sz[cur] = 1;
for(auto nxt: links[cur]){
dfs(nxt);
sz[cur] += sz[nxt];
}
};
dfs(S);
rep(i, 1, K+1) cout << sz[i] << ' ';
}