def move(): r0, c0 = 0, 0 dx = [1, 0, -1, 0] dy = [0, 1, 0, -1] for i in range(4): for j in range(4): if A[i][j] == 0: r0, c0 = i, j for (r, c) in [(r0+dy[i], c0+dx[i]) for i in range(4) if 0 <= r0+dy[i] and r0+dy[i] < 4 and 0 <= c0+dx[i] and c0+dx[i] < 4]: pos = r0 * 4 + c0 + 1 if A[r][c] == pos: A[r][c], A[r0][c0] = 0, pos move() def acceptable(): for i in range(4): for j in range(4): if A[i][j] != (i * 4 + j + 1) % 16: return "No" return "Yes" A = [map(int, raw_input().split()) for i in range(4)] r, c = 0, 0 move() print(acceptable())