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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <bits/stdc++.h>
using namespace std;
typedef long long lld;
typedef pair<int,int> pii;
typedef pair<lld,lld> pll;
typedef vector<int> vint;
#define ff first
#define ss second
#define mp make_pair
#define pb push_back

int n,m,T,k,w1,w2;
bitset<2048> t[2048];
lld mx=1ll<<60, a, b;
int s[1<<20];
char c;
queue <pair<int,pii> > q;
pair<int,pii> x;

void add(int d, int x, int y){
	if(t[x][y]){
		t[x][y]=0;
		q.push(mp(d+1,mp(x,y)));
	}
}

int main(){
	scanf("%d%d%d",&n,&m,&T);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			scanf(" %c",&c);
			if(c=='.') t[i][j]=1;
		}
	}
	
	add(-1,1,1);
	
	while(!q.empty()){
		x=q.front();
		q.pop();
		if(x.ss==mp(n,m)){
			w1=x.ff;
			break;
		}
		add(x.ff,x.ss.ff-1,x.ss.ss);
		add(x.ff,x.ss.ff+1,x.ss.ss);
		add(x.ff,x.ss.ff,x.ss.ss-1);
		add(x.ff,x.ss.ff,x.ss.ss+1);
	}
	w2=w1+2-n-m;
	w2>>=1;
	w1-=w2;
	for(int i=1;i<=T;++i){
		scanf("%lld%lld",&a,&b);
		if(a*w1+b*w2==mx) ++k;
		if(a*w1+b*w2<mx){
			k=1;
			mx=a*w1+b*w2;
		} 
	}
	
	printf("%lld %d",mx,k);
	
	
	return 0;
}
/*
2 5 4
.X...
...X.
2 1
2 2
1 7
2 1

5 7 1
......X
X.X..X.
..X.X.X
.X.X...
.....X.
2 1
*/