import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	}

}
 import java.util.Scanner; Scanner java.util public class Main{

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	}

} Main public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	} main {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) String input1 = sc.nextLine(); input1 sc.nextLine() sc.nextLine sc String input2 = ""; input2 "" String[] NM = input1.split(" "); NM input1.split(" ") input1.split input1 " " int n = Integer.parseInt(NM[0]); n Integer.parseInt(NM[0]) Integer.parseInt Integer NM[0] NM 0 int m = Integer.parseInt(NM[1]); m Integer.parseInt(NM[1]) Integer.parseInt Integer NM[1] NM 1 boolean judge = true; judge true int value = 0; value 0 if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		} (n >= 1 && n <= 100) && (m >= 1 && m <= 100) (n >= 1 && n <= 100) n >= 1 n 1 n <= 100 n 100 (m >= 1 && m <= 100) m >= 1 m 1 m <= 100 m 100 {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		} int[][] A = new int[n][m]; A new int[n][m] n m int[] b = new int[m]; b new int[m] m int[] c = new int[n]; c new int[n] n String[] AString = new String[m]; AString new String[m] m String[] BString = new String[m]; BString new String[m] m if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			} judge == true judge true {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			} if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			} judge == true judge true {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			} for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				} {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				} for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					} int j = 0; int j = 0; j 0 j < m j m j++ j++ j {
						c[i] += A[i][j] * b[j];

					} {
						c[i] += A[i][j] * b[j];

					} c[i] += A[i][j] * b[j] c[i] c i A[i][j] * b[j] A[i][j] A[i] A i j b[j] b j for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				} int k = 0; int k = 0; k 0 k < n k n k++ k++ k {
					System.out.println(c[k]);

				} {
					System.out.println(c[k]);

				} System.out.println(c[k]) System.out.println System.out System System.out c[k] c k String[] args args public class Main{

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	}

} public class Main{

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	}

} Main
import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Scanner sc = new Scanner(System.in);
		String input1 = sc.nextLine();
		String input2 = "";
		String[] NM = input1.split(" ");

		int n = Integer.parseInt(NM[0]);
		int m = Integer.parseInt(NM[1]);
		boolean judge = true;
		int value = 0; // 入力された行列Aと列Bの数値を一時的に保持するための変数

		if ((n >= 1 && n <= 100) && (m >= 1 && m <= 100)) {

			int[][] A = new int[n][m];
			int[] b = new int[m];
			int[] c = new int[n];

			String[] AString = new String[m];
			String[] BString = new String[m];

			out: for (int i = 0; i < n; i++) {
				input2 = sc.nextLine();
				AString = input2.split(" ");
				for (int j = 0; j < AString.length; j++) {
					value = Integer.parseInt(AString[j]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;

					}
					A[i][j] = value;
				}
			}

			if (judge == true) {

				out: for (int i = 0; i < m; i++) {
					BString[i] = sc.nextLine();
					value = Integer.parseInt(BString[i]);
					if (value < 0 || value > 1000) {
						judge = false;
						break out;
					}
					b[i] = value;
				}
			}

			if (judge == true) {
				for (int i = 0; i < n; i++) {
					for (int j = 0; j < m; j++) {
						c[i] += A[i][j] * b[j];

					}

				}

				for (int k = 0; k < n; k++) {
					System.out.println(c[k]);

				}

			}
		}

	}

}

