/*
	Rozwiązanie zadania "Wycieczka górska [C]" (WYC) na Potyczki Algorytmiczne 2020.
	Damian Mazur
*/
#include <stdio.h>

struct punkt
{
	char typ;
	char stan;
};

struct znajomy
{
	int a;
	int b;
};

struct komorka
{
	int x;
	int y;
	char kierunek;
	char aktywna;
	long long wynikKomorki;
};

const long long llMax = 9223372036854775807;
const char gora = 0;
const char prawo = 1;
const char lewo = 2;
const char dol = 3;
int n, m, k;
punkt** mapa;
znajomy* znajomi;
komorka* komorki;
int iloscKomorek = 0;
long long minCzas = llMax;
long long znajomiZminCzas = 0;

void wyczyscMape()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			mapa[i][j].stan = 0;
		}
	}
	return;
}

void wyznaczWynik()
{
	for (int j = 0; j < k; j++)
	{
		wyczyscMape();
		komorki[0].x = 0;
		komorki[0].y = 0;
		komorki[0].kierunek = lewo;
		komorki[0].aktywna = 1;
		komorki[0].wynikKomorki = 0;
		iloscKomorek = 1;
		long long lokalnyCzas = llMax;
		while (true)
		{
			int komorkiAktywne = 0;
			int iloscKomorekDoSprawdzenia = iloscKomorek;
			for (int i = 0; i < iloscKomorekDoSprawdzenia; i++)
			{
				if (komorki[i].aktywna)
				{
					komorkiAktywne = 1;
					int zmienionaPozycja = 0;
					int x = komorki[i].x;
					int y = komorki[i].y;
					int kierunek = komorki[i].kierunek;
					int wynikKomorki = komorki[i].wynikKomorki;
					if (x == m - 1 && y == n - 1)
					{
						komorki[i].aktywna = 0;
						if (komorki[i].wynikKomorki < lokalnyCzas)
						{
							lokalnyCzas = komorki[i].wynikKomorki;
						}
						continue;
					}
					if (kierunek != prawo && x < m - 1 && !mapa[y][x + 1].typ && !mapa[y][x + 1].stan) //prawo
					{
						zmienionaPozycja = 1;
						komorki[i].x++;
						komorki[i].kierunek = lewo;
						komorki[i].wynikKomorki += znajomi[j].a;
						mapa[y][x + 1].stan = 1;
					}
					if (kierunek != dol && y < n - 1 && !mapa[y + 1][x].typ && !mapa[y + 1][x].stan) //dol
					{
						if (zmienionaPozycja)
						{
							komorki[iloscKomorek].x = x;
							komorki[iloscKomorek].y = y + 1;
							komorki[iloscKomorek].kierunek = gora;
							komorki[iloscKomorek].aktywna = 1;
							komorki[iloscKomorek].wynikKomorki = wynikKomorki + znajomi[j].a;
							iloscKomorek++;
						}
						else
						{
							zmienionaPozycja = 1;
							komorki[i].y++;
							komorki[i].kierunek = gora;
							komorki[i].wynikKomorki += znajomi[j].a;
						}
						mapa[y + 1][x].stan = 1;
					}
					if (kierunek != lewo && x > 0 && !mapa[y][x - 1].typ && !mapa[y][x - 1].stan) //lewo
					{
						if (zmienionaPozycja)
						{
							komorki[iloscKomorek].x = x - 1;
							komorki[iloscKomorek].y = y;
							komorki[iloscKomorek].kierunek = prawo;
							komorki[iloscKomorek].aktywna = 1;
							komorki[iloscKomorek].wynikKomorki = wynikKomorki + znajomi[j].b;
							iloscKomorek++;
						}
						else
						{
							zmienionaPozycja = 1;
							komorki[i].x--;
							komorki[i].kierunek = prawo;
							komorki[i].wynikKomorki += znajomi[j].b;
						}
						mapa[y][x - 1].stan = 1;
					}
					if (kierunek != gora && y > 0 && !mapa[y - 1][x].typ && !mapa[y - 1][x].stan) //gora
					{
						if (zmienionaPozycja)
						{
							komorki[iloscKomorek].x = x;
							komorki[iloscKomorek].y = y - 1;
							komorki[iloscKomorek].kierunek = dol;
							komorki[iloscKomorek].aktywna = 1;
							komorki[iloscKomorek].wynikKomorki = wynikKomorki + znajomi[j].b;
							iloscKomorek++;
						}
						else
						{
							zmienionaPozycja = 1;
							komorki[i].y--;
							komorki[i].kierunek = dol;
							komorki[i].wynikKomorki += znajomi[j].b;
						}
						mapa[y - 1][x].stan = 1;
					}
					if (!zmienionaPozycja)
					{
						komorki[i].aktywna = 0;
					}
				}
			}
			if (!komorkiAktywne)
			{
				break;
			}
		}
		if (lokalnyCzas < minCzas)
		{
			minCzas = lokalnyCzas;
			znajomiZminCzas = 1;
		}
		else if (lokalnyCzas == minCzas)
		{
			znajomiZminCzas++;
		}
	}
	return;
}

int main()
{
	scanf("%d", &n);
	scanf("%d", &m);
	scanf("%d", &k);
	mapa = new punkt * [n];
	znajomi = new znajomy[k];
	komorki = new komorka[n * m];
	char* wierszWejsciowy = new char[m + 1];
	for (int i = 0; i < n; i++)
	{
		mapa[i] = new punkt[m];
		scanf("%s", wierszWejsciowy);
		for (int j = 0; j < m; j++)
		{
			if (wierszWejsciowy[j] == '.')
			{
				mapa[i][j].typ = 0;
			}
			else
			{
				mapa[i][j].typ = 1;
			}
		}
	}
	for (int i = 0; i < k; i++)
	{
		scanf("%d", &znajomi[i].a);
		scanf("%d", &znajomi[i].b);
	}
	wyznaczWynik();
	if (minCzas == llMax)
	{
		printf("0 0");
	}
	else
	{
		printf("%lld %d", minCzas, znajomiZminCzas);
	}
	return 0;
}