#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e18 + 8;
struct need {
  long long minl, maxl;
  int num;
  bool operator<(const need o) const {
    if (maxl == o.maxl) {
      if (minl == o.minl) return num < o.num;
      return minl > o.minl;
    }
    return maxl < o.maxl;
  }
} ne[200010], tmp;
set<need> p;
struct edge {
  long long v;
  int num;
} a[200010];
long long l[200010];
long long r[200010];
int n, m;
int ans[200010];
bool vis[200010];
int cmpe(edge a, edge b) { return a.v < b.v; }
int cmpn(need a, need b) {
  if (a.minl == b.minl) return a.maxl > b.maxl;
  return a.minl < b.minl;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d%I64d", l + i, r + i);
  }
  for (int i = 1; i < n; i++) {
    tmp.maxl = r[i + 1] - l[i];
    tmp.minl = l[i + 1] - r[i];
    tmp.num = i;
    ne[i - 1] = tmp;
  }
  for (int i = 0; i < m; i++) {
    scanf("%I64d", &a[i].v);
    a[i].num = i + 1;
  }
  sort(a, a + m, cmpe);
  sort(ne, ne + n - 1, cmpn);
  int i = 0;
  set<need>::iterator it;
  for (int j = 0; j < m; j++) {
    while (i < n - 1 && ne[i].minl <= a[j].v) {
      p.insert(ne[i]);
      i++;
    }
    it = p.begin();
    if (it != p.end() && a[j].v <= it->maxl) {
      ans[it->num] = a[j].num;
      p.erase(it);
    }
  }
  int ok = 1;
  for (int i = 1; i < n; i++) {
    if (!ans[i]) {
      ok = 0;
    }
  }
  if (ok) {
    puts("Yes");
    for (int i = 1; i < n; i++) {
      printf("%d ", ans[i]);
    }
  } else {
    puts("No");
  }
  return 0;
}
