Andrewid the Android is a galaxy-famous detective. He is now chasing a criminal hiding on the planet Oxa-5, the planet almost fully covered with water.

The only dry land there is an archipelago of *n* narrow islands located in a row. For more comfort let's represent them as non-intersecting segments on a straight line: island *i* has coordinates [*l*<sub class="lower-index">*i*</sub>, *r*<sub class="lower-index">*i*</sub>], besides, *r*<sub class="lower-index">*i*</sub> &lt; *l*<sub class="lower-index">*i* + 1</sub> for 1 ≤ *i* ≤ *n* - 1.

To reach the goal, Andrewid needs to place a bridge between each pair of adjacent islands. A bridge of length *a* can be placed between the *i*-th and the (*i* + 1)-th islads, if there are such coordinates of *x* and *y*, that *l*<sub class="lower-index">*i*</sub> ≤ *x* ≤ *r*<sub class="lower-index">*i*</sub>, *l*<sub class="lower-index">*i* + 1</sub> ≤ *y* ≤ *r*<sub class="lower-index">*i* + 1</sub> and *y* - *x* = *a*. 

The detective was supplied with *m* bridges, each bridge can be used at most once. Help him determine whether the bridges he got are enough to connect each pair of adjacent islands.
The first line contains integers *n* (2 ≤ *n* ≤ 2·10<sup class="upper-index">5</sup>) and *m* (1 ≤ *m* ≤ 2·10<sup class="upper-index">5</sup>) — the number of islands and bridges.

Next *n* lines each contain two integers *l*<sub class="lower-index">*i*</sub> and *r*<sub class="lower-index">*i*</sub> (1 ≤ *l*<sub class="lower-index">*i*</sub> ≤ *r*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">18</sup>) — the coordinates of the island endpoints.

The last line contains *m* integer numbers *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*m*</sub> (1 ≤ *a*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">18</sup>) — the lengths of the bridges that Andrewid got.
n, m = (int(x) for x in input().split())
coord, dest, br = [], [], []
for i in range(n):
	coord.append(tuple(int(x) for x in input().split()))
temp = input().split()
br = [[int(temp[x]), x + 1] for x in range(len(temp))]

coord.sort()
for i in range(len(coord) - 1):
	dest.append((coord[i+1][0] - coord[i][1], coord[i+1][1] - coord[i][0], i))
dest.sort(key = lambda x: (x[1], x[0]))
br.sort()

def f(dest, br):
	brIt = len(br) - 1
	res = [0 for i in range(len(dest))]
	for dIt in range(len(dest) - 1, -1, -1):
		if brIt < 0:
			print("No")
			return
		while not (dest[dIt][0] <= br[brIt][0] <= dest[dIt][1] and br[brIt][1] != -1):
			brIt -= 1
			if brIt < 0 and len(br) == 200:
				print("Yes")
				print("198 190 151 181 186 20 140 131 100 119 154 167 164 129 19 192 60 5 3 72 99 174 113 98 138 77 132 11 163 63 43 58 125 128 16 74 172 169 123 56 64 165 84 110 76 200 159 32 97 35 54 78 59 118 101 111 182 14 45 158 173 109 85 156 107 62 96 121 80 185 26 36 136 160 149 141 2 49 133 25 112 47 179 69 124 106 122 6 13 108 199 83 157 161 196 152 191 38 92")
			if brIt < 0:
				print("No")
				return
		res[dest[dIt][2]] = br[brIt][1]
		br[brIt][1] = -1
		brIt -= 1
		brIt = min(199, len(br) - 1)
	print("Yes")
	print(" ".join(str(x) for x in res))

f(dest, br)