1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;

char MAP[2000][2001];
int D[2000][2000];
int N, M, K;

long long PPL[1000000];

deque<pair<int, int>> q;

void add(const pair<int, int>& p, int d) {
  if (not(0 <= p.first && p.first < N && 0 <= p.second && p.second < M))
    return;
  if (MAP[p.first][p.second] != '.')
    return;
  MAP[p.first][p.second] = '#';
  D[p.first][p.second] = d;
  q.push_back(p);
}


int main() {
  scanf("%d%d%d", &N, &M, &K);
  for (int i = 0; i < N; i++) scanf("%s", MAP[i]);

  add(make_pair(0, 0), 0);

  while (not q.empty()) {
    auto a = q.front(); q.pop_front();
    int d = D[a.first][a.second] + 1;
    a.first--; add(a, d);
    a.first+=2; add(a, d);
    a.first--, a.second--; add(a, d);
    a.second+=2; add(a, d);
  }

  long long d2 = (D[N-1][M-1] - (N+M-2))/2;

  for (int i = 0; i < K; i++) {
    int a, b; scanf("%d%d", &a, &b);
    PPL[i] =  (d2 + N+M-2) * a + d2 * b;
  }

  sort(PPL, PPL+K);

  printf("%lld %d\n", PPL[0], count(PPL, PPL+K, PPL[0]));
  return 0;
}