← Home
#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long ll;

const int Maxn = 505;
const int Maxm = 2 * Maxn;

int n, m, r;
int x[Maxn], ox[Maxm];
int sum[Maxn][Maxn];
int my[Maxn][Maxn];
int has[Maxn][Maxn], cnt[Maxn][Maxn];
int res1;
ll res2;

int main()
{
	scanf("%d %d %d", &n, &m, &r);
	int cur = r;
	for (int i = 0; i <= r; i++) {
		while (i * i + cur * cur > r * r) cur--;
		x[i] = cur;
	}
	for (int i = 0; i <= r + r; i++)
		for (int j = max(i - r, 0); j <= min(i, r); j++)
			ox[i] = max(ox[i], x[j] + x[i - j] + 1);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			scanf("%d", &sum[i][j]); sum[i][j] += sum[i][j - 1];
		}
	for (int i = r + 1; i <= n - r; i++)
		for (int j = r + 1; j <= m - r; j++) {
			for (int k = 0; k <= r; k++) {
				my[i][j] += sum[i - k][j + x[k]] - sum[i - k][j - x[k] - 1];
				if (k) my[i][j] += sum[i + k][j + x[k]] - sum[i + k][j - x[k] - 1];
			}
			has[i][j] = has[i][j - 1]; cnt[i][j] = cnt[i][j - 1];
			if (my[i][j] > has[i][j]) { has[i][j] = my[i][j]; cnt[i][j] = 0; }
			if (my[i][j] == has[i][j]) cnt[i][j]++;
		}
	for (int i = r + 1; i <= n - r; i++)
		for (int j = r + 1; j <= m - r; j++)
			for (int k = r + 1; k <= n - r; k++)
				if (abs(i - k) > r + r) {
					if (my[i][j] + has[k][m - r] >= res1) {
						if (my[i][j] + has[k][m - r] > res1) { res1 = my[i][j] + has[k][m - r]; res2 = 0; }
						res2 += cnt[k][m - r];
					}
				} else {
					int col = j - ox[abs(i - k)];
					if (col > r && my[i][j] + has[k][col] >= res1) {
						if (my[i][j] + has[k][col] > res1) { res1 = my[i][j] + has[k][col]; res2 = 0; }
						res2 += 2 * cnt[k][col];
					}
				}
	printf("%d %I64d\n", res1, res2 / 2);
	return 0;
}