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.
a=input().split()
spisok = [0] * (int(a[0])-1)
for i in range(len(spisok)):
    spisok[i] = [0, 0, 0]
s=0
per = input().split()
for i in range(int(a[0])-1):
    per2 = input().split()
    spisok[i][0]=int(per2[0])-int(per[1])
    spisok[i][1]= int(per2[1])-int(per[0])
    spisok[i][2] = s
    s+=1
    per = per2[:]
spisok.sort(key = lambda x: (int(x[0]), int(x[1] ) ))
mosti = input().split()
for i in range(len(mosti)):
    mosti[i]=[mosti[i],i]
mosti.sort(key = lambda x: (int(x[0])))
per = 0
need = 0
answer = [0] * (int(a[0])-1)
for i in range(len(spisok)):
    need2=0
    for j in range(per, len(mosti)):
        if int(mosti[j][0]) > spisok[i][1]:
            need=1
            break
        elif int(mosti[j][0]) >= spisok[i][0]:
            per = j+1
            answer[spisok[i][2]] = int(mosti[j][1])+1
            need2 = 1
            break
            
    if need2 == 0:
        print('No')
        need = 1
        break
if need == 0:
    print('Yes')
    print(' '.join(map(str,answer)))


