import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);

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

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

	}

	//Aベクトルを生成
	static long[][] CreateVectorA(int n, int m) {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	}

	//bベクトルを生成
	static long[] CreateVectorB(int m) {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	}

	//Aベクトルとbベクトルの積を計算
	static long[] IntegrationVector(long[][] A, long[] b) {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	}

	//表示処理
	static void print(long[] C) {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	}

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

	static Scanner sc = new Scanner(System.in);

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

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

	}

	//Aベクトルを生成
	static long[][] CreateVectorA(int n, int m) {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	}

	//bベクトルを生成
	static long[] CreateVectorB(int m) {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	}

	//Aベクトルとbベクトルの積を計算
	static long[] IntegrationVector(long[][] A, long[] b) {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	}

	//表示処理
	static void print(long[] C) {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	}

} Main static Scanner sc = new Scanner(System.in); sc new Scanner(System.in) public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

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

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

	} int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int m = sc.nextInt(); m sc.nextInt() sc.nextInt sc long[][] A = CreateVectorA(n, m); A CreateVectorA(n, m) CreateVectorA n m long[] b = CreateVectorB(m); b CreateVectorB(m) CreateVectorB m long[] C = IntegrationVector(A, b); C IntegrationVector(A, b) IntegrationVector A b print(C) print C String[] args args //Aベクトルを生成
	static long[][] CreateVectorA(int n, int m) {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	} CreateVectorA {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	} long[][] vector = new long[n][m]; vector new long[n][m] n m for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		} {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		} for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			} int k = 0; int k = 0; k 0 k < m k m k++ k++ k {

				vector[i][k] = sc.nextInt();
			} {

				vector[i][k] = sc.nextInt();
			} vector[i][k] = sc.nextInt() vector[i][k] vector[i] vector i k sc.nextInt() sc.nextInt sc return vector; vector int n n int m m //bベクトルを生成
	static long[] CreateVectorB(int m) {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	} CreateVectorB {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	} long[] vector = new long[m]; vector new long[m] m for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		} int j = 0; int j = 0; j 0 j < m j m j++ j++ j {

			vector[j] = sc.nextInt();
		} {

			vector[j] = sc.nextInt();
		} vector[j] = sc.nextInt() vector[j] vector j sc.nextInt() sc.nextInt sc return vector; vector int m m //Aベクトルとbベクトルの積を計算
	static long[] IntegrationVector(long[][] A, long[] b) {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	} IntegrationVector {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	} long C[]=new long[A.length]; C new long[A.length] A.length A A.length for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		} int i = 0; int i = 0; i 0 i < A.length i A.length A A.length i++ i++ i {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		} {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		} for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			} int j = 0; int j = 0; j 0 j < b.length j b.length b b.length 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 return C; C long[][] A A long[] b b //表示処理
	static void print(long[] C) {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	} print {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	} for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		} int i = 0; int i = 0; i 0 i < C.length i C.length C C.length i++ i++ i {
			//出力
			System.out.println(C[i]);
		} {
			//出力
			System.out.println(C[i]);
		} System.out.println(C[i]) System.out.println System.out System System.out C[i] C i long[] C C public class Main {

	static Scanner sc = new Scanner(System.in);

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

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

	}

	//Aベクトルを生成
	static long[][] CreateVectorA(int n, int m) {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	}

	//bベクトルを生成
	static long[] CreateVectorB(int m) {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	}

	//Aベクトルとbベクトルの積を計算
	static long[] IntegrationVector(long[][] A, long[] b) {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	}

	//表示処理
	static void print(long[] C) {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	}

} public class Main {

	static Scanner sc = new Scanner(System.in);

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

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

	}

	//Aベクトルを生成
	static long[][] CreateVectorA(int n, int m) {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	}

	//bベクトルを生成
	static long[] CreateVectorB(int m) {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	}

	//Aベクトルとbベクトルの積を計算
	static long[] IntegrationVector(long[][] A, long[] b) {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	}

	//表示処理
	static void print(long[] C) {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	}

} Main
import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);

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

		// 入力
		int n = sc.nextInt();
		int m = sc.nextInt();

		// A行列の入力
		long[][] A = CreateVectorA(n, m);

		// B行列の入力
		long[] b = CreateVectorB(m);

		// 計算
		long[] C = IntegrationVector(A, b);

		//出力
		print(C);

	}

	//Aベクトルを生成
	static long[][] CreateVectorA(int n, int m) {
		long[][] vector = new long[n][m];
		for (int i = 0; i < n; i++) {

			for (int k = 0; k < m; k++) {

				vector[i][k] = sc.nextInt();
			}
		}
		return vector;
	}

	//bベクトルを生成
	static long[] CreateVectorB(int m) {
		long[] vector = new long[m];
		for (int j = 0; j < m; j++) {

			vector[j] = sc.nextInt();
		}
		return vector;
	}

	//Aベクトルとbベクトルの積を計算
	static long[] IntegrationVector(long[][] A, long[] b) {
		long C[]=new long[A.length];
		for (int i = 0; i < A.length; i++) {
			for (int j = 0; j < b.length; j++) {

				C[i] += A[i][j] * b[j];
			}
			
		}
		return C;
	}

	//表示処理
	static void print(long[] C) {
		for (int i = 0; i < C.length; i++) {
			//出力
			System.out.println(C[i]);
		}
	}

}

