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.
from functools import cmp_to_key
import sys
from typing import Tuple


def cmp_int(l: int, r: int) -> int:
    if l < r:
        return -1
    if l > r:
        return 1
    else:
        return 0


def cmp(l: list, r: list) -> int:
    for i in range(len(l)):
        if l[i] != r[i]:
            return cmp_int(l[i], r[i])
    return cmp_int(l[-1], r[-1])


if __name__ == '__main__':
    n, m = [int(x) for x in input().split()]
    islands = [input().split() for _ in range(n)]
    islands = [(int(l), int(r)) for l, r in islands]
    brindges = [int(x) for x in input().split()]
    brindges = [[x, i] for i, x in enumerate(brindges)]

    ranges = [[islands[i + 1][0] - islands[i][1], islands[i + 1][1] - islands[i][0], i] for i in range(n - 1)]
    ranges = sorted(ranges, key=cmp_to_key(cmp))

    brindges = sorted(brindges, key=cmp_to_key(cmp))

    i = 0
    output = []
    for r in ranges:
        while i < m and brindges[i][0] < r[0]:
            i += 1
        if m == i or brindges[i][0] > r[1]:
            print('No')
            sys.exit(0)
        output.append((r[2], brindges[i][1]))
        i += 1

    output = sorted(output, key=cmp_to_key(cmp))
           
    print('Yes')
    print(' '.join([str(b + 1) for _,  b in output]))
