#include <iostream>

using namespace std;

int main(){
	int max; // переменная для хранения максимальной суммы строк
	int rows, cols; // строки и столбцы матрицы

	// ввод размера матрицы 
	cout << "Input rows of matrix: " << endl;
	cin >> rows;

	cout << "Input cols of matrix: " << endl;
	cin >> cols;
	
	// если размер меньше 0, то завершаем программу
	if ((rows < 1) || (cols < 1)){
		cout << "Size cannot be less than 1.";
		return 0;
	}

	// инициализация матрицы с указанными размерами
    int **matrix = new int *[rows];
	for (int i = 0; i < rows; i++){
		matrix[i] = new int [cols];
	}

	int *sum = new int [rows]; //массив, хранящий суммы строк матрицы
	//заполняем массив для суммы нулями для корректной работы памяти
	for (int i = 0; i < rows; i++){
		sum[i] = 0;
	}

	//ввод матрицы
    for (int i = 0; i < rows; i++){
		for (int j = 0; j < cols; j++){
            cin >> matrix[i][j];
        }
		cout << endl;
	}

	//вывод матрицы
	for (int i = 0; i < rows; i++){
		for (int j = 0; j < cols; j++){
            cout << matrix[i][j] << "\t";
        }
		cout << endl;
	}

	//вычисление сумм строк
	for (int i = 0; i < rows; i++){
		for (int j = 0; j < cols; j++){
			sum[i] = sum[i] + matrix[i][j];
		}
	}

	//вывод сумм строк
	for (int i = 0; i < rows; i++){
		cout << "Sum of " << i+1 << " row: " << sum[i] << endl;
	}

	cout << "-------------------" << endl;

	max = sum[0];
	//нахождение максимальной суммы
	for (int i = 0; i < rows; i++){
		if (max < sum[i]){
			max = sum[i];
		}
	}

	//вывод максимальной суммы
	cout << "Max: " << max << endl;

	for (int i = 0; i < rows; i++){
		delete[] matrix[i];
	}

	delete[] matrix;
	
	return 0;
}
