
import java.util.Scanner;

public class Main{

	public static void main(String[] args) {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	}
}

class excel {

	// フィールド
	int[][] sheet;

	// 入力値から表(2次元配列)を作るメソッド
	public void setSheet(int height, int width) {

		// 最後に合計値を出す列を用意
		sheet = new int[height + 1][width + 1];
	}

	// 入力値をセルに入れる
	public void setSell(int input_number, int height, int width) {
		sheet[height][width] = input_number;
	}

	// 行の合計値を最後のセルに追加
	public void sum_row() {
		// 行の数だけ回す
		for (int i = 0; i < sheet.length; i++) {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		}
	}

	// 列の合計値を最後のセルに追加
	public void sum_column() {
		// 列の数だけ回す
		for (int c = 0; c < sheet[0].length; c++) {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		}
	}

	// 表全体を出力
	public void out_sheet() {

		// 行の回数
		for (int i = 0; i < sheet.length; i++) {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		}
	}
} import java.util.Scanner; Scanner java.util public class Main{

	public static void main(String[] args) {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	}
} Main public static void main(String[] args) {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	} main {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	} int height = 0; height 0 int width = 0; width 0 Scanner sc = new Scanner(System.in); sc new Scanner(System.in) while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		} sc.hasNext() sc.hasNext sc {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		} height = sc.nextInt() height sc.nextInt() sc.nextInt sc width = sc.nextInt() width sc.nextInt() sc.nextInt sc break; excel ex = new excel(); ex new excel() ex.setSheet(height, width) ex.setSheet ex height width while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		} sc.hasNext() sc.hasNext sc {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		} for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			} int i = 0; int i = 0; i 0 i < height i height i++ i++ i {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			} {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			} for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				} int s = 0; int s = 0; s 0 s < width s width s++ s++ s {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				} {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				} int input_number = sc.nextInt(); input_number sc.nextInt() sc.nextInt sc ex.setSell(input_number, i, s) ex.setSell ex input_number i s break; ex.sum_row() ex.sum_row ex ex.sum_column() ex.sum_column ex ex.out_sheet() ex.out_sheet ex String[] args args class excel {

	// フィールド
	int[][] sheet;

	// 入力値から表(2次元配列)を作るメソッド
	public void setSheet(int height, int width) {

		// 最後に合計値を出す列を用意
		sheet = new int[height + 1][width + 1];
	}

	// 入力値をセルに入れる
	public void setSell(int input_number, int height, int width) {
		sheet[height][width] = input_number;
	}

	// 行の合計値を最後のセルに追加
	public void sum_row() {
		// 行の数だけ回す
		for (int i = 0; i < sheet.length; i++) {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		}
	}

	// 列の合計値を最後のセルに追加
	public void sum_column() {
		// 列の数だけ回す
		for (int c = 0; c < sheet[0].length; c++) {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		}
	}

	// 表全体を出力
	public void out_sheet() {

		// 行の回数
		for (int i = 0; i < sheet.length; i++) {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		}
	}
} excel // フィールド
	int[][] sheet; sheet // 入力値から表(2次元配列)を作るメソッド
	public void setSheet(int height, int width) {

		// 最後に合計値を出す列を用意
		sheet = new int[height + 1][width + 1];
	} setSheet {

		// 最後に合計値を出す列を用意
		sheet = new int[height + 1][width + 1];
	} sheet = new int[height + 1][width + 1] sheet new int[height + 1][width + 1] height + 1 height 1 width + 1 width 1 int height height int width width // 入力値をセルに入れる
	public void setSell(int input_number, int height, int width) {
		sheet[height][width] = input_number;
	} setSell {
		sheet[height][width] = input_number;
	} sheet[height][width] = input_number sheet[height][width] sheet[height] sheet height width input_number int input_number input_number int height height int width width // 行の合計値を最後のセルに追加
	public void sum_row() {
		// 行の数だけ回す
		for (int i = 0; i < sheet.length; i++) {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		}
	} sum_row {
		// 行の数だけ回す
		for (int i = 0; i < sheet.length; i++) {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		}
	} for (int i = 0; i < sheet.length; i++) {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		} int i = 0; int i = 0; i 0 i < sheet.length i sheet.length sheet sheet.length i++ i++ i {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		} {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		} int sum = 0; sum 0 for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			} int s = 0; int s = 0; s 0 s < sheet[0].length s sheet[0].length sheet[0] sheet 0 sheet[0].length s++ s++ s {

				// 行の合計値
				sum = sheet[i][s] + sum;
			} {

				// 行の合計値
				sum = sheet[i][s] + sum;
			} sum = sheet[i][s] + sum sum sheet[i][s] + sum sheet[i][s] sheet[i] sheet i s sum sheet[i][(sheet[0].length - 1)] = sum sheet[i][(sheet[0].length - 1)] sheet[i] sheet i (sheet[0].length - 1) sheet[0].length sheet[0] sheet 0 sheet[0].length 1 sum // 列の合計値を最後のセルに追加
	public void sum_column() {
		// 列の数だけ回す
		for (int c = 0; c < sheet[0].length; c++) {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		}
	} sum_column {
		// 列の数だけ回す
		for (int c = 0; c < sheet[0].length; c++) {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		}
	} for (int c = 0; c < sheet[0].length; c++) {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		} int c = 0; int c = 0; c 0 c < sheet[0].length c sheet[0].length sheet[0] sheet 0 sheet[0].length c++ c++ c {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		} {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		} int sum = 0; sum 0 for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			} int s = 0; int s = 0; s 0 s < sheet.length s sheet.length sheet sheet.length s++ s++ s {

				// 行の合計値
				sum = sheet[s][c] + sum;
			} {

				// 行の合計値
				sum = sheet[s][c] + sum;
			} sum = sheet[s][c] + sum sum sheet[s][c] + sum sheet[s][c] sheet[s] sheet s c sum sheet[sheet.length-1][c] = sum sheet[sheet.length-1][c] sheet[sheet.length-1] sheet sheet.length-1 sheet.length sheet sheet.length 1 c sum // 表全体を出力
	public void out_sheet() {

		// 行の回数
		for (int i = 0; i < sheet.length; i++) {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		}
	} out_sheet {

		// 行の回数
		for (int i = 0; i < sheet.length; i++) {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		}
	} for (int i = 0; i < sheet.length; i++) {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		} int i = 0; int i = 0; i 0 i < sheet.length i sheet.length sheet sheet.length i++ i++ i {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		} {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		} for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			} int s = 0; int s = 0; s 0 s < sheet[0].length - 1 s sheet[0].length - 1 sheet[0].length sheet[0] sheet 0 sheet[0].length 1 s++ s++ s {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			} {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			} System.out.print(sheet[i][s] + " ") System.out.print System.out System System.out sheet[i][s] + " " sheet[i][s] sheet[i] sheet i s " " System.out.println(sheet[i][(sheet[0].length - 1)]) System.out.println System.out System System.out sheet[i][(sheet[0].length - 1)] sheet[i] sheet i (sheet[0].length - 1) sheet[0].length sheet[0] sheet 0 sheet[0].length 1 public class Main{

	public static void main(String[] args) {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	}
} public class Main{

	public static void main(String[] args) {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	}
} Main

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {

		//
		int height = 0;
		int width = 0;

		// 表の縦、横を決める入力値を持ってくる
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			height = sc.nextInt();
			width = sc.nextInt();
			break;
		}

		// シートのインスタンスを作る
		excel ex = new excel();

		// 入力値から表を作る
		ex.setSheet(height, width);

		// 表に入力する値を持ってくる
		while (sc.hasNext()) {

			// 入力された値を表のそれぞれの場所に入れる
			for (int i = 0; i < height; i++) {
				for (int s = 0; s < width; s++) {
					int input_number = sc.nextInt();
					ex.setSell(input_number, i, s);
				}
			}
			break;
		}
		// 表の最後の列に行の計算結果を挿入
		ex.sum_row();
		ex.sum_column();

		// 表全体を出力
		ex.out_sheet();

	}
}

class excel {

	// フィールド
	int[][] sheet;

	// 入力値から表(2次元配列)を作るメソッド
	public void setSheet(int height, int width) {

		// 最後に合計値を出す列を用意
		sheet = new int[height + 1][width + 1];
	}

	// 入力値をセルに入れる
	public void setSell(int input_number, int height, int width) {
		sheet[height][width] = input_number;
	}

	// 行の合計値を最後のセルに追加
	public void sum_row() {
		// 行の数だけ回す
		for (int i = 0; i < sheet.length; i++) {

			// 列の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet[0].length; s++) {

				// 行の合計値
				sum = sheet[i][s] + sum;
			}
			// 最後に追加
			sheet[i][(sheet[0].length - 1)] = sum;
		}
	}

	// 列の合計値を最後のセルに追加
	public void sum_column() {
		// 列の数だけ回す
		for (int c = 0; c < sheet[0].length; c++) {

			// 行の数だけ回す
			int sum = 0;
			for (int s = 0; s < sheet.length; s++) {

				// 行の合計値
				sum = sheet[s][c] + sum;
			}
			// 最後に追加
			sheet[sheet.length-1][c] = sum;
		}
	}

	// 表全体を出力
	public void out_sheet() {

		// 行の回数
		for (int i = 0; i < sheet.length; i++) {

			// 列の回数
			for (int s = 0; s < sheet[0].length - 1; s++) {
				// 空白を一つ空けて表示
				System.out.print(sheet[i][s] + " ");
			}
			// 最後の行を改行
			System.out.println(sheet[i][(sheet[0].length - 1)]);
		}
	}
}