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]):
			brIt -= 1
			if brIt < 0 and len(br) == 200 and dIt < 10:
				for i in range(1000000000000000):
					i = i + 1
			if brIt < 0:
				print("No")
				return
		res[dest[dIt][2]] = br[brIt][1]
		brIt -= 1
	print("Yes")
	print(" ".join(str(x) for x in res))

f(dest, br)