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
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <bits/stdc++.h>
using namespace std;
using ll	= long long;
using ull	= unsigned long long;
using ld	= long double;
using pii	= pair<int,int>;
using pll	= pair<ll,ll>;
using vi	= vector<int>;
using vb	= vector<bool>;
using vc	= vector<char>;
using vvc	= vector<vc>;
using vvi	= vector<vi>;
using vvb	= vector<vb>;
using vpii	= vector<pii>;
using vpll	= vector<pll>;
using vll	= vector<ll>;
using vvll	= vector<vll>;
using vull	= vector<ull>;
#define f first
#define s second
#define pb emplace_back
#define rep(i, begin, end) for(auto i = (begin); i <= (end); ++i)
#define repr(i, begin, end) for(auto i = (begin); i >= (end); --i)
#define bend(X) X.begin(), X.end()
#ifdef LOCAL
#define nl << endl
#define deb(x) cout << #x << " = " << x << endl
#define say(x) cout << x << endl
void print() { cout << endl; }
#else
#define nl << '\n'
#define deb(x)
#define say(x)
void print() { cout << '\n'; }
#endif
constexpr int INF = 1e9+1e7;
constexpr ll INFl = INF;
constexpr ll INFll = 1e18+1e16;
template <typename T, typename... Args> void print(T x, Args... args) { cout << x << ' '; print(args...); }
template <typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2> x) { os << '(' << x.f << ' ' << x.s << ')'; return os; }
template <typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x) { is >> x.f >> x.s; return is; }
template <typename T> istream& operator>>(istream& is, vector<T>& x) { for(T& i : x) is >> i; return is; }
template <typename T> ostream& operator<<(ostream& os, vector<T>& x) { for(const T& i : x) os << i << ' '; return os; }
template <typename T> ostream& operator<<(ostream& os, set<T>& x) { for(const T& i : x) os << i << ' '; return os; }
template <typename T1, typename T2> ostream& operator<<(ostream& os, map<T1, T2>& x) { for(const auto& i : x) os << "(" << i.first << " : " << i.second << ") "; return os; }
template <typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B) { return {A.f+B.f, A.s+B.s}; }
template <typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B) { return {A.f-B.f, A.s-B.s}; }
template <typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A) { return {-A.f, -A.s}; }
template <typename T1, typename T2> bool maxe(T1& A, const T2& B) { return A<B ? A=B,true : false; }
template <typename T1, typename T2> bool mine(T1& A, const T2& B) { return B<A ? A=B,true : false; }

// ----------------------------------------------------------------
// ----------------------------------------------------------------

ll n, m, k;
vvc T;
vvi D;
vpii K;

bool ok(int i, int j) {
	return i>=0 && i<n && j>=0 && j<m && T[i][j]=='.' && D[i][j] < 0;
}

int bfs() {
	queue<pii> Q;
	Q.emplace(0,0);
	D[0][0]=0;
	while(!Q.empty()) {
		auto [i,j] = Q.front(); Q.pop();
		for(auto [ii,jj] : {pii{-1,0},pii{1,0},pii{0,-1},pii{0,1}})
			if(ok(i+ii,j+jj))
				Q.emplace(i+ii,j+jj), D[i+ii][j+jj] = D[i][j]+1;
	}
	return D[n-1][m-1];
}

ll solve() {
	ll x = (bfs()-(n+m-2))/2;
	vll R;
	R.reserve(k);
	for(auto [a,b] : K)
		R.pb((n+m-2)*a + x*(a+b));
	deb(R);
	ll a = INFll;
	int b = 0;
	for(auto x : R) mine(a,x);
	for(auto x : R) b += (a==x);
	print(a,b);
	
	return -INF;
}

void in() {
	cin >> n >> m >> k;
	T.resize(n, vc(m));
	D.resize(n, vi(m, -1));
	K.resize(k);
	cin >> T >> K;
}



int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int noOfTests = 1;
	//cin >> noOfTests;
	
	while(noOfTests --> 0) {
		in();
		ll result = solve();
		if     (result == ll(-'t')) cout << "TAK\n";
		else if(result == ll(-'n')) cout << "NIE\n";
		else if(result == ll(-'y')) cout << "YES\n";
		else if(result == ll(-'o')) cout << "NO\n";
		else if(result == ll(-'e')) cout << "Popsute\n";
		else if(result != -INF) cout << result << '\n';
	}
	
	return 0;
}