#include <bits/stdc++.h>
const int maxn = 2e5 + 10;
const int inf = 2e7 + 10;
using namespace std;
struct node {
  long long l, r;
  int id;
  friend bool operator<(const node& aa, const node& bb) { return aa.r > bb.r; }
} ils[maxn], brs[maxn];
struct Node {
  long long l;
  int id;
} a[maxn];
priority_queue<node> q;
int b[maxn];
bool cmp(node aa, node bb) { return aa.l < bb.l; }
bool cmp1(Node aa, Node bb) { return aa.l < bb.l; }
int main(void) {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%lld%lld", &ils[i].l, &ils[i].r);
  for (int i = 0; i < m; i++) {
    scanf("%lld", &a[i].l);
    a[i].id = i + 1;
  }
  if (n - 1 > m) {
    printf("No\n");
    return 0;
  }
  for (int i = 1; i < n; i++) {
    brs[i - 1].l = ils[i].l - ils[i - 1].r;
    brs[i - 1].r = ils[i].r - ils[i - 1].l;
    brs[i - 1].id = i - 1;
  }
  sort(brs, brs + n - 1, cmp);
  sort(a, a + m, cmp1);
  int num = 0, cnt = 0;
  for (int i = 0; i < m; i++) {
    while (cnt < n - 1 && brs[cnt].l <= a[i].l) {
      q.push(brs[cnt]);
      cnt++;
    }
    if (q.empty()) continue;
    node t = q.top();
    q.pop();
    if (t.r < a[i].l) break;
    b[t.id] = a[i].id;
    num++;
  }
  if (num == n - 1) {
    printf("Yes\n");
    for (int i = 0; i < n - 1; i++)
      printf("%d%c", b[i], i == n - 2 ? '\n' : ' ');
    printf("\n");
  } else
    printf("No\n");
  return 0;
}
