#include <bits/stdc++.h>

using namespace std;

const int nMax = 50003;
const int DIM = 26;

int n, m;
int v[nMax][DIM];
int64_t ans[nMax];
int id[nMax];

void setupp(int j) {
	for (int i = 0; i < n; ++i)
		id[i] = i;

	sort(id, id + n, [&] (const int &a, const int &b) {
		return v[a][j] < v[b][j];
	});
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("cutit.in", "r", stdin);
#endif // ONLINE_JUDGE
	scanf("%d%d", &n, &m);

	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < m; ++j)
			scanf("%d", &v[i][j]);
	}

	for (int j = 0; j < m; ++j) {
		setupp(j);
		int64_t sum = 0;

		for (int p = 0; p < n; ++p) {
			int i = id[p];

			if (p != 0) {
				ans[i] += (1LL * v[i][j] * p) - sum;
			}

			sum += v[i][j];
		}

		sum = 0;

		for (int p = n - 1; p >= 0; --p) {
			int i = id[p];

			if (p != n - 1) {
				ans[i] += sum - 1LL * v[i][j] * (n - p - 1);
			}

			sum += v[i][j];
		}
	}

	long long mn = 1e18;
	int nr = 0;

	for (int i = 0; i < n; ++i)
		if (ans[i] < mn)
			mn = ans[i], nr = 1;
		else if (ans[i] == mn) ++nr;

	printf("%lld\n", mn);
	printf("%d\n", nr);
	vector<vector<int>>sol;
	vector<int>cur;

	for (int i = 0; i < n; ++i)
		if (ans[i] == mn) {
			cur.clear();

			for (int j = 0; j < m; ++j)
				cur.push_back(v[i][j]);

			sol.push_back(cur);
		}

	sort(sol.begin(), sol.end());

	for (const auto& i : sol) {
		for (const auto& j : i)
			printf("%d ", j);

		printf("\n");
	}

	return 0;
}