Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
#include <stdio.h>

int main() {
	int M[3][3], O[3][3];
	int bingo = 0;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			scanf("%d", &M[i][j]);
		}
	}
	int N, X;
	scanf("%d", &N);
	for (int i = 0; i < N; i++) {
		scanf("%d", &X);
	    for (int i = 0; i < 3; i++) {
		    for (int j = 0; j < 3; j++) {
		        if (M[i][j] == X) {
		        	O[i][j] = 1;
	            }
            }
		}
	}
	
	if (O[0][0] + O[1][1] + O[2][2] == 3 || O[0][2] + O[1][1] + O[2][0] == 3) {
		printf ("Yes\n");
		return 0;
	}
	for (int i = 0; i < 3; i++) {
		if (O[i][0] + O[i][1] + O[i][2] == 3 || O[0][i] + O[1][i] + O[2][i] == 3) {
			printf ("Yes\n");
			return 0;
		}
	}
	printf ("No\n");
	return 0;
}```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"Yes"
.LC2:
	.string	"No"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$144, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movl	$0, -100(%rbp)
	movl	$0, -124(%rbp)
	jmp	.L2
.L5:
	movl	$0, -120(%rbp)
	jmp	.L3
.L4:
	leaq	-96(%rbp), %rcx
	movl	-120(%rbp), %eax
	movslq	%eax, %rsi
	movl	-124(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rsi, %rax
	salq	$2, %rax
	addq	%rcx, %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	addl	$1, -120(%rbp)
.L3:
	cmpl	$2, -120(%rbp)
	jle	.L4
	addl	$1, -124(%rbp)
.L2:
	cmpl	$2, -124(%rbp)
	jle	.L5
	leaq	-132(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -116(%rbp)
	jmp	.L6
.L12:
	leaq	-128(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -112(%rbp)
	jmp	.L7
.L11:
	movl	$0, -108(%rbp)
	jmp	.L8
.L10:
	movl	-108(%rbp), %eax
	movslq	%eax, %rcx
	movl	-112(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rcx, %rax
	movl	-96(%rbp,%rax,4), %edx
	movl	-128(%rbp), %eax
	cmpl	%eax, %edx
	jne	.L9
	movl	-108(%rbp), %eax
	movslq	%eax, %rcx
	movl	-112(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rcx, %rax
	movl	$1, -48(%rbp,%rax,4)
.L9:
	addl	$1, -108(%rbp)
.L8:
	cmpl	$2, -108(%rbp)
	jle	.L10
	addl	$1, -112(%rbp)
.L7:
	cmpl	$2, -112(%rbp)
	jle	.L11
	addl	$1, -116(%rbp)
.L6:
	movl	-132(%rbp), %eax
	cmpl	%eax, -116(%rbp)
	jl	.L12
	movl	-48(%rbp), %edx
	movl	-32(%rbp), %eax
	addl	%eax, %edx
	movl	-16(%rbp), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L13
	movl	-40(%rbp), %edx
	movl	-32(%rbp), %eax
	addl	%eax, %edx
	movl	-24(%rbp), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	jne	.L14
.L13:
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L20
.L14:
	movl	$0, -104(%rbp)
	jmp	.L16
.L19:
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$48, %rax
	movl	(%rax), %ecx
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$44, %rax
	movl	(%rax), %eax
	addl	%eax, %ecx
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$40, %rax
	movl	(%rax), %eax
	addl	%ecx, %eax
	cmpl	$3, %eax
	je	.L17
	movl	-104(%rbp), %eax
	cltq
	movl	-48(%rbp,%rax,4), %edx
	movl	-104(%rbp), %eax
	cltq
	addq	$3, %rax
	movl	-48(%rbp,%rax,4), %eax
	addl	%eax, %edx
	movl	-104(%rbp), %eax
	cltq
	addq	$6, %rax
	movl	-48(%rbp,%rax,4), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	jne	.L18
.L17:
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L20
.L18:
	addl	$1, -104(%rbp)
.L16:
	cmpl	$2, -104(%rbp)
	jle	.L19
	leaq	.LC2(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
.L20:
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L21
	call	__stack_chk_fail@PLT
.L21:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
user
	.file	"temp.c"
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d"
.LC1:
	.string	"Yes"
.LC2:
	.string	"No"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB23:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	leaq	.LC0(%rip), %rbx
	subq	$120, %rsp
	.cfi_def_cfa_offset 160
	movq	%fs:40, %rax
	movq	%rax, 104(%rsp)
	xorl	%eax, %eax
	leaq	16(%rsp), %rbp
	leaq	52(%rsp), %r12
.L2:
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	leaq	4(%rbp), %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	leaq	8(%rbp), %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	addq	$12, %rbp
	cmpq	%rbp, %r12
	jne	.L2
	leaq	8(%rsp), %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	movl	8(%rsp), %eax
	testl	%eax, %eax
	jle	.L3
	xorl	%r13d, %r13d
	leaq	12(%rsp), %rbp
	movl	$1, %r12d
	.p2align 4,,10
	.p2align 3
.L15:
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	movl	12(%rsp), %eax
	movl	$1, %ecx
	cmpl	%eax, 16(%rsp)
	je	.L4
	movl	64(%rsp), %ecx
.L4:
	movl	%ecx, 64(%rsp)
	movl	$1, %edx
	cmpl	20(%rsp), %eax
	je	.L5
	movl	68(%rsp), %edx
.L5:
	movl	%edx, 68(%rsp)
	movl	$1, %edx
	cmpl	24(%rsp), %eax
	je	.L6
	movl	72(%rsp), %edx
.L6:
	movl	%edx, 72(%rsp)
	movl	$1, %edx
	cmpl	28(%rsp), %eax
	je	.L7
	movl	76(%rsp), %edx
.L7:
	movl	%edx, 76(%rsp)
	movl	$1, %edx
	cmpl	32(%rsp), %eax
	je	.L8
	movl	80(%rsp), %edx
.L8:
	movl	%edx, 80(%rsp)
	movl	$1, %esi
	cmpl	36(%rsp), %eax
	je	.L9
	movl	84(%rsp), %esi
.L9:
	movl	%esi, 84(%rsp)
	movl	$1, %esi
	cmpl	40(%rsp), %eax
	je	.L10
	movl	88(%rsp), %esi
.L10:
	movl	%esi, 88(%rsp)
	movl	$1, %esi
	cmpl	44(%rsp), %eax
	je	.L11
	movl	92(%rsp), %esi
.L11:
	movl	%esi, 92(%rsp)
	cmpl	48(%rsp), %eax
	je	.L12
	movl	96(%rsp), %esi
	addl	$1, %r13d
	cmpl	%r13d, 8(%rsp)
	jg	.L15
.L14:
	leal	(%rcx,%rdx), %eax
	addl	%esi, %eax
	cmpl	$3, %eax
	je	.L16
	movl	72(%rsp), %ecx
	movl	88(%rsp), %esi
	leal	(%rcx,%rdx), %eax
	addl	%esi, %eax
	cmpl	$3, %eax
	je	.L16
	movl	64(%rsp), %eax
	movl	68(%rsp), %edi
	leal	(%rdi,%rax), %edx
	addl	%ecx, %edx
	cmpl	$3, %edx
	je	.L16
	movl	76(%rsp), %edx
	addl	%edx, %eax
	addl	%esi, %eax
	cmpl	$3, %eax
	je	.L16
	movl	80(%rsp), %eax
	movl	84(%rsp), %r8d
	addl	%eax, %edx
	addl	%r8d, %edx
	cmpl	$3, %edx
	je	.L16
	movl	92(%rsp), %r9d
	addl	%edi, %eax
	addl	%r9d, %eax
	cmpl	$3, %eax
	je	.L16
	movl	96(%rsp), %edx
	leal	(%rsi,%r9), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L16
	leal	(%rcx,%r8), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L16
	leaq	.LC2(%rip), %rdi
	call	puts@PLT
.L18:
	movq	104(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L53
	addq	$120, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 40
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L12:
	.cfi_restore_state
	movl	%r12d, 96(%rsp)
	addl	$1, %r13d
	cmpl	%r13d, 8(%rsp)
	jg	.L15
	movl	$1, %esi
	jmp	.L14
.L16:
	leaq	.LC1(%rip), %rdi
	call	puts@PLT
	jmp	.L18
.L3:
	movl	64(%rsp), %ecx
	movl	80(%rsp), %edx
	movl	96(%rsp), %esi
	jmp	.L14
.L53:
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE23:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

rule
	.file	"temp.c"
	.text
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d"
.LC1:
	.string	"Yes"
.LC2:
	.string	"No"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB23:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	leaq	.LC0(%rip), %rbx
	subq	$120, %rsp
	.cfi_def_cfa_offset 160
	movq	%fs:40, %rax
	movq	%rax, 104(%rsp)
	xorl	%eax, %eax
	leaq	16(%rsp), %rbp
	leaq	52(%rsp), %r12
.L2:
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	leaq	4(%rbp), %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	leaq	8(%rbp), %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	addq	$12, %rbp
	cmpq	%rbp, %r12
	jne	.L2
	leaq	8(%rsp), %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	movl	8(%rsp), %eax
	testl	%eax, %eax
	jle	.L3
	xorl	%r13d, %r13d
	leaq	12(%rsp), %rbp
	movl	$1, %r12d
	.p2align 4,,10
	.p2align 3
.L15:
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	movl	12(%rsp), %eax
	movl	$1, %ecx
	cmpl	%eax, 16(%rsp)
	je	.L4
	movl	64(%rsp), %ecx
.L4:
	movl	%ecx, 64(%rsp)
	movl	$1, %edx
	cmpl	20(%rsp), %eax
	je	.L5
	movl	68(%rsp), %edx
.L5:
	movl	%edx, 68(%rsp)
	movl	$1, %edx
	cmpl	24(%rsp), %eax
	je	.L6
	movl	72(%rsp), %edx
.L6:
	movl	%edx, 72(%rsp)
	movl	$1, %edx
	cmpl	28(%rsp), %eax
	je	.L7
	movl	76(%rsp), %edx
.L7:
	movl	%edx, 76(%rsp)
	movl	$1, %edx
	cmpl	32(%rsp), %eax
	je	.L8
	movl	80(%rsp), %edx
.L8:
	movl	%edx, 80(%rsp)
	movl	$1, %esi
	cmpl	36(%rsp), %eax
	je	.L9
	movl	84(%rsp), %esi
.L9:
	movl	%esi, 84(%rsp)
	movl	$1, %esi
	cmpl	40(%rsp), %eax
	je	.L10
	movl	88(%rsp), %esi
.L10:
	movl	%esi, 88(%rsp)
	movl	$1, %esi
	cmpl	44(%rsp), %eax
	je	.L11
	movl	92(%rsp), %esi
.L11:
	movl	%esi, 92(%rsp)
	cmpl	48(%rsp), %eax
	je	.L12
	movl	96(%rsp), %esi
	addl	$1, %r13d
	cmpl	%r13d, 8(%rsp)
	jg	.L15
.L14:
	leal	(%rcx,%rdx), %eax
	addl	%esi, %eax
	cmpl	$3, %eax
	je	.L16
	movl	72(%rsp), %ecx
	movl	88(%rsp), %esi
	leal	(%rcx,%rdx), %eax
	addl	%esi, %eax
	cmpl	$3, %eax
	je	.L16
	movl	64(%rsp), %eax
	movl	68(%rsp), %edi
	leal	(%rdi,%rax), %edx
	addl	%ecx, %edx
	cmpl	$3, %edx
	je	.L16
	movl	76(%rsp), %edx
	addl	%edx, %eax
	addl	%esi, %eax
	cmpl	$3, %eax
	je	.L16
	movl	80(%rsp), %eax
	movl	84(%rsp), %r8d
	addl	%eax, %edx
	addl	%r8d, %edx
	cmpl	$3, %edx
	je	.L16
	movl	92(%rsp), %r9d
	addl	%edi, %eax
	addl	%r9d, %eax
	cmpl	$3, %eax
	je	.L16
	movl	96(%rsp), %edx
	leal	(%rsi,%r9), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L16
	leal	(%rcx,%r8), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L16
	leaq	.LC2(%rip), %rdi
	call	puts@PLT
.L18:
	movq	104(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L53
	addq	$120, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 40
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L12:
	.cfi_restore_state
	movl	%r12d, 96(%rsp)
	addl	$1, %r13d
	cmpl	%r13d, 8(%rsp)
	jg	.L15
	movl	$1, %esi
	jmp	.L14
.L16:
	leaq	.LC1(%rip), %rdi
	call	puts@PLT
	jmp	.L18
.L3:
	movl	64(%rsp), %ecx
	movl	80(%rsp), %edx
	movl	96(%rsp), %esi
	jmp	.L14
.L53:
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE23:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

#include <stdio.h>

int main() {
	int M[3][3], O[3][3];
	int bingo = 0;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			scanf("%d", &M[i][j]);
		}
	}
	int N, X;
	scanf("%d", &N);
	for (int i = 0; i < N; i++) {
		scanf("%d", &X);
	    for (int i = 0; i < 3; i++) {
		    for (int j = 0; j < 3; j++) {
		        if (M[i][j] == X) {
		        	O[i][j] = 1;
	            }
            }
		}
	}
	
	if (O[0][0] + O[1][1] + O[2][2] == 3 || O[0][2] + O[1][1] + O[2][0] == 3) {
		printf ("Yes\n");
		return 0;
	}
	for (int i = 0; i < 3; i++) {
		if (O[i][0] + O[i][1] + O[i][2] == 3 || O[0][i] + O[1][i] + O[2][i] == 3) {
			printf ("Yes\n");
			return 0;
		}
	}
	printf ("No\n");
	return 0;
}
60 88 34
92 41 43
39 73 48
10
60
43
88
11
48
73
65
41
92
34
 41 7 46
26 89 2
78 92 8
5
12
45
16
57
17
 84 97 66
79 89 11
61 59 7
7
89
7
146
79
24
84
30
 60 106 34
92 41 43
39 73 48
10
60
43
88
11
48
73
65
41
92
34
 84 97 66
79 89 11
61 59 7
7
95
7
146
79
24
84
30
 41 6 46
26 89 2
78 92 8
5
12
45
16
57
17
 60 68 34
92 41 43
39 73 48
10
60
43
88
11
48
73
65
41
92
34
 84 97 66
79 89 6
61 59 7
7
95
7
146
79
24
84
30
 41 6 46
1 89 2
78 92 8
5
12
45
16
57
17
 60 68 34
92 41 43
39 73 48
10
60
43
88
10
48
73
65
41
92
34

Yes
 No
 Yes
 Yes
 No
 No
 Yes
 No
 No
 Yes

Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
#include <stdio.h>

int main() {
	int M[3][3], O[3][3];
	int bingo = 0;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			scanf("%d", &M[i][j]);
		}
	}
	int N, X;
	scanf("%d", &N);
	for (int i = 0; i < N; i++) {
		scanf("%d", &X);
	    for (int i = 0; i < 3; i++) {
		    for (int j = 0; j < 3; j++) {
		        if (M[i][j] == X) {
		        	O[i][j] = 1;
	            }
            }
		}
	}
	
	if (O[0][0] + O[1][1] + O[2][2] == 3 || O[0][2] + O[1][1] + O[2][0] == 3) {
		printf ("Yes\n");
		return 0;
	}
	for (int i = 0; i < 3; i++) {
		if (O[i][0] + O[i][1] + O[i][2] == 3 || O[0][i] + O[1][i] + O[2][i] == 3) {
			printf ("Yes\n");
			return 0;
		}
	}
	printf ("No\n");
	return 0;
}```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"Yes"
.LC2:
	.string	"No"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$144, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movl	$0, -100(%rbp)
	movl	$0, -124(%rbp)
	jmp	.L2
.L5:
	movl	$0, -120(%rbp)
	jmp	.L3
.L4:
	leaq	-96(%rbp), %rcx
	movl	-120(%rbp), %eax
	movslq	%eax, %rsi
	movl	-124(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rsi, %rax
	salq	$2, %rax
	addq	%rcx, %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	addl	$1, -120(%rbp)
.L3:
	cmpl	$2, -120(%rbp)
	jle	.L4
	addl	$1, -124(%rbp)
.L2:
	cmpl	$2, -124(%rbp)
	jle	.L5
	leaq	-132(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -116(%rbp)
	jmp	.L6
.L12:
	leaq	-128(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -112(%rbp)
	jmp	.L7
.L11:
	movl	$0, -108(%rbp)
	jmp	.L8
.L10:
	movl	-108(%rbp), %eax
	movslq	%eax, %rcx
	movl	-112(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rcx, %rax
	movl	-96(%rbp,%rax,4), %edx
	movl	-128(%rbp), %eax
	cmpl	%eax, %edx
	jne	.L9
	movl	-108(%rbp), %eax
	movslq	%eax, %rcx
	movl	-112(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rcx, %rax
	movl	$1, -48(%rbp,%rax,4)
.L9:
	addl	$1, -108(%rbp)
.L8:
	cmpl	$2, -108(%rbp)
	jle	.L10
	addl	$1, -112(%rbp)
.L7:
	cmpl	$2, -112(%rbp)
	jle	.L11
	addl	$1, -116(%rbp)
.L6:
	movl	-132(%rbp), %eax
	cmpl	%eax, -116(%rbp)
	jl	.L12
	movl	-48(%rbp), %edx
	movl	-32(%rbp), %eax
	addl	%eax, %edx
	movl	-16(%rbp), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L13
	movl	-40(%rbp), %edx
	movl	-32(%rbp), %eax
	addl	%eax, %edx
	movl	-24(%rbp), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	jne	.L14
.L13:
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L20
.L14:
	movl	$0, -104(%rbp)
	jmp	.L16
.L19:
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$48, %rax
	movl	(%rax), %ecx
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$44, %rax
	movl	(%rax), %eax
	addl	%eax, %ecx
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$40, %rax
	movl	(%rax), %eax
	addl	%ecx, %eax
	cmpl	$3, %eax
	je	.L17
	movl	-104(%rbp), %eax
	cltq
	movl	-48(%rbp,%rax,4), %edx
	movl	-104(%rbp), %eax
	cltq
	addq	$3, %rax
	movl	-48(%rbp,%rax,4), %eax
	addl	%eax, %edx
	movl	-104(%rbp), %eax
	cltq
	addq	$6, %rax
	movl	-48(%rbp,%rax,4), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	jne	.L18
.L17:
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L20
.L18:
	addl	$1, -104(%rbp)
.L16:
	cmpl	$2, -104(%rbp)
	jle	.L19
	leaq	.LC2(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
.L20:
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L21
	call	__stack_chk_fail@PLT
.L21:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
train
	.file	"temp.c"
	.text
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"Yes"
.LC2:
	.string	"No"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$144, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movl	$0, -100(%rbp)
	movl	$0, -124(%rbp)
	jmp	.L2
.L5:
	movl	$0, -120(%rbp)
	jmp	.L3
.L4:
	leaq	-96(%rbp), %rcx
	movl	-120(%rbp), %eax
	movslq	%eax, %rsi
	movl	-124(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rsi, %rax
	salq	$2, %rax
	addq	%rcx, %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	addl	$1, -120(%rbp)
.L3:
	cmpl	$2, -120(%rbp)
	jle	.L4
	addl	$1, -124(%rbp)
.L2:
	cmpl	$2, -124(%rbp)
	jle	.L5
	leaq	-132(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -116(%rbp)
	jmp	.L6
.L12:
	leaq	-128(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -112(%rbp)
	jmp	.L7
.L11:
	movl	$0, -108(%rbp)
	jmp	.L8
.L10:
	movl	-108(%rbp), %eax
	movslq	%eax, %rcx
	movl	-112(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rcx, %rax
	movl	-96(%rbp,%rax,4), %edx
	movl	-128(%rbp), %eax
	cmpl	%eax, %edx
	jne	.L9
	movl	-108(%rbp), %eax
	movslq	%eax, %rcx
	movl	-112(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	addq	%rcx, %rax
	movl	$1, -48(%rbp,%rax,4)
.L9:
	addl	$1, -108(%rbp)
.L8:
	cmpl	$2, -108(%rbp)
	jle	.L10
	addl	$1, -112(%rbp)
.L7:
	cmpl	$2, -112(%rbp)
	jle	.L11
	addl	$1, -116(%rbp)
.L6:
	movl	-132(%rbp), %eax
	cmpl	%eax, -116(%rbp)
	jl	.L12
	movl	-48(%rbp), %edx
	movl	-32(%rbp), %eax
	addl	%eax, %edx
	movl	-16(%rbp), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	je	.L13
	movl	-40(%rbp), %edx
	movl	-32(%rbp), %eax
	addl	%eax, %edx
	movl	-24(%rbp), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	jne	.L14
.L13:
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L20
.L14:
	movl	$0, -104(%rbp)
	jmp	.L16
.L19:
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$48, %rax
	movl	(%rax), %ecx
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$44, %rax
	movl	(%rax), %eax
	addl	%eax, %ecx
	movl	-104(%rbp), %eax
	movslq	%eax, %rdx
	movq	%rdx, %rax
	addq	%rax, %rax
	addq	%rdx, %rax
	salq	$2, %rax
	addq	%rbp, %rax
	subq	$40, %rax
	movl	(%rax), %eax
	addl	%ecx, %eax
	cmpl	$3, %eax
	je	.L17
	movl	-104(%rbp), %eax
	cltq
	movl	-48(%rbp,%rax,4), %edx
	movl	-104(%rbp), %eax
	cltq
	addq	$3, %rax
	movl	-48(%rbp,%rax,4), %eax
	addl	%eax, %edx
	movl	-104(%rbp), %eax
	cltq
	addq	$6, %rax
	movl	-48(%rbp,%rax,4), %eax
	addl	%edx, %eax
	cmpl	$3, %eax
	jne	.L18
.L17:
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L20
.L18:
	addl	$1, -104(%rbp)
.L16:
	cmpl	$2, -104(%rbp)
	jle	.L19
	leaq	.LC2(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
.L20:
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L21
	call	__stack_chk_fail@PLT
.L21:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
