import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Objects;

public class Main{
    public static void main(String[] args){
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    }

    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(nextToken());
        }

        long nextLong() {
            return Long.parseLong(nextToken());
        }

        double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    }
}
 import java.io.BufferedReader; BufferedReader java.io import java.io.FileNotFoundException; FileNotFoundException java.io import java.io.FileReader; FileReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.StringTokenizer; StringTokenizer java.util import java.util.Arrays; Arrays java.util import java.util.Objects; Objects java.util public class Main{
    public static void main(String[] args){
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    }

    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(nextToken());
        }

        long nextLong() {
            return Long.parseLong(nextToken());
        }

        double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    }
} Main public static void main(String[] args){
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    } main {
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    } FastScanner sc = new FastScanner(); sc new FastScanner() int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int m = sc.nextInt(); m sc.nextInt() sc.nextInt sc int l = sc.nextInt(); l sc.nextInt() sc.nextInt sc long[][] a = new long[n][m]; a new long[n][m] n m long[][] b = new long[m][l]; b new long[m][l] m l long[][] ans = new long[n][l]; ans new long[n][l] n l for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        } int i=0; int i=0; i 0 i<n i n i++ i++ i {
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        } {
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        } for(int j=0;j<m;j++)a[i][j] = sc.nextLong(); int j=0; int j=0; j 0 j<m j m j++ j++ j a[i][j] = sc.nextLong(); a[i][j] = sc.nextLong() a[i][j] a[i] a i j sc.nextLong() sc.nextLong sc for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        } int i=0; int i=0; i 0 i<m i m i++ i++ i {
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        } {
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        } for(int j=0;j<l;j++)b[i][j] = sc.nextLong(); int j=0; int j=0; j 0 j<l j l j++ j++ j b[i][j] = sc.nextLong(); b[i][j] = sc.nextLong() b[i][j] b[i] b i j sc.nextLong() sc.nextLong sc for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        } int i=0; int i=0; i 0 i<n i n i++ i++ i {
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        } {
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        } for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            } int j=0; int j=0; j 0 j<l j l j++ j++ j {
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            } {
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            } for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j]; int k=0; int k=0; k 0 k<m k m k++ k++ k ans[i][j] += a[i][k]*b[k][j]; ans[i][j] += a[i][k]*b[k][j] ans[i][j] ans[i] ans i j a[i][k]*b[k][j] a[i][k] a[i] a i k b[k][j] b[k] b k j for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        } int i=0; int i=0; i 0 i<n i n i++ i++ i {
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        } {
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        } for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            } int j=0; int j=0; j 0 j<l-1 j l-1 l 1 j++ j++ j {
                System.out.print(ans[i][j]+" ");
            } {
                System.out.print(ans[i][j]+" ");
            } System.out.print(ans[i][j]+" ") System.out.print System.out System System.out ans[i][j]+" " ans[i][j] ans[i] ans i j " " System.out.println(ans[i][l-1]) System.out.println System.out System System.out ans[i][l-1] ans[i] ans i l-1 l 1 String[] args args public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(nextToken());
        }

        long nextLong() {
            return Long.parseLong(nextToken());
        }

        double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    } FastScanner BufferedReader br; br StringTokenizer st; st public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } FastScanner {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } FileNotFoundException e {
                e.printStackTrace();
            } e.printStackTrace() e.printStackTrace e {
                br = new BufferedReader(new FileReader(s));
            } br = new BufferedReader(new FileReader(s)) br new BufferedReader(new FileReader(s)) String s s public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        } FastScanner {
            br = new BufferedReader(new InputStreamReader(System.in));
        } br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        } nextToken {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        } while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } st == null || !st.hasMoreElements() st == null st null !st.hasMoreElements() st.hasMoreElements() st.hasMoreElements st {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } IOException e {
                    e.printStackTrace();
                } e.printStackTrace() e.printStackTrace e {
                    st = new StringTokenizer(br.readLine());
                } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st int nextInt() {
            return Integer.parseInt(nextToken());
        } nextInt {
            return Integer.parseInt(nextToken());
        } return Integer.parseInt(nextToken()); Integer.parseInt(nextToken()) Integer.parseInt Integer nextToken() nextToken long nextLong() {
            return Long.parseLong(nextToken());
        } nextLong {
            return Long.parseLong(nextToken());
        } return Long.parseLong(nextToken()); Long.parseLong(nextToken()) Long.parseLong Long nextToken() nextToken double nextDouble() {
            return Double.parseDouble(nextToken());
        } nextDouble {
            return Double.parseDouble(nextToken());
        } return Double.parseDouble(nextToken()); Double.parseDouble(nextToken()) Double.parseDouble Double nextToken() nextToken public class Main{
    public static void main(String[] args){
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    }

    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(nextToken());
        }

        long nextLong() {
            return Long.parseLong(nextToken());
        }

        double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    }
} public class Main{
    public static void main(String[] args){
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    }

    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(nextToken());
        }

        long nextLong() {
            return Long.parseLong(nextToken());
        }

        double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    }
} Main
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Objects;

public class Main{
    public static void main(String[] args){
        FastScanner sc = new FastScanner();

        int n = sc.nextInt();
        int m = sc.nextInt();
        int l = sc.nextInt();

        long[][] a = new long[n][m];
        long[][] b = new long[m][l];
        long[][] ans = new long[n][l];

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)a[i][j] = sc.nextLong();
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<l;j++)b[i][j] = sc.nextLong();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l;j++){
                for(int k=0;k<m;k++)ans[i][j] += a[i][k]*b[k][j];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<l-1;j++){
                System.out.print(ans[i][j]+" ");
            }
            System.out.println(ans[i][l-1]);
        }
    }

    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner(String s) {
            try {
                br = new BufferedReader(new FileReader(s));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

        public FastScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String nextToken() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(nextToken());
        }

        long nextLong() {
            return Long.parseLong(nextToken());
        }

        double nextDouble() {
            return Double.parseDouble(nextToken());
        }
    }
}

