#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>

using namespace std;

int coords[50000][25];
int m, n;

long long dist(int from, int to) {
    long long r = 0;
    for (int i = 0; i < n; i++)
        r += abs((long long)(coords[from][i] - coords[to][i]));
    return r;
}

double avg[25];

long long distavg(int from) {
    long long r = 0;
    for (int i = 0; i < n; i++)
        r += abs((long long)(coords[from][i] - avg[i]));
    return r;
}

string strcoords(int idx) {
    ostringstream os;
    for (int i = 0; i < n - 1; i++)
        os << coords[idx][i] << ' ';
    os << coords[idx][n - 1];
    return os.str();
}

int main() {
    cin >> m >> n;

    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            cin >> coords[i][j];

    long long sum[25] = {};
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            sum[j] += coords[i][j];
    
    for (int j = 0; j < n; j++)
        avg[j] = sum[j] / (double)m;

    long long min_val = -1;
    int min_idx = -1;
    vector<int> min_str;
    for (int i = 0; i < m; i++) {
        long long d = distavg(i);
        if (d < min_val || min_idx == -1) {
            min_val = d;
            min_idx = i;
            min_str.clear();
        }
        
        if (d == min_val) {
           // min_str.push_back(strcoords(i));
            min_str.push_back(i);
        }
    }
    sort(min_str.begin(), min_str.end(), [](int a, int b) {
        for (int i = 0; i < n; i++) {
            if (coords[a][i] < coords[b][i])
                return true;
            if (coords[a][i] > coords[b][i])
                return false;
        }
        return false;
    });

    long long dsum = 0;
    for (int i = 0; i < m; i++)
        dsum += dist(i, min_idx);
    cout << dsum << '\n';

    cout << min_str.size() << '\n';
    for (int i = 0; i < min_str.size(); i++) {
        for (int j = 0; j < n; j++) {
            cout << coords[min_str[i]][j] << ' ';
        }
        cout << '\n';
    }
}