#include <bits/stdc++.h>
typedef struct acv {
  int x, y;
  int l;
  int mark;
} node;
int abs(int a) { return a > 0 ? a : -a; }
int main() {
  int m, n;
  while (scanf("%d %d", &n, &m) != EOF) {
    int i, j;
    node nail[505];
    int rod[505], sign[505] = {0};
    for (i = 1; i <= n; i++) {
      scanf("%d %d", &nail[i].x, &nail[i].y);
      nail[i].mark = 0;
    }
    for (i = 1; i <= m; i++) scanf("%d", &rod[i]);
    int leng1, leng2;
    for (i = 1; i <= n; i++) {
      if (i == 1) {
        leng1 = nail[1].x - nail[n].x + nail[1].y - nail[n].y;
        leng2 = nail[1].x - nail[2].x + nail[1].y - nail[2].y;
      } else if (i == n) {
        leng1 = nail[n].x - nail[1].x + nail[n].y - nail[1].y;
        leng2 = nail[n].x - nail[n - 1].x + nail[n].y - nail[n - 1].y;
      } else {
        leng1 = nail[i].x - nail[i - 1].x + nail[i].y - nail[i - 1].y;
        leng2 = nail[i].x - nail[i + 1].x + nail[i].y - nail[i + 1].y;
      }
      nail[i].l = abs(leng1) + abs(leng2);
    }
    int temp[505], flag = 1;
    for (i = 1; i <= m; i++) sign[i] = 0;
    for (i = 1; i <= n; i++) {
      int k = 1;
      if (nail[i].mark == 0) {
        k = 0;
        int kr = 1;
        for (j = 1; j <= m; j++) {
          if (nail[i].l == rod[j] && sign[j] == 0) {
            kr = 0;
            sign[j] = 1;
            nail[i].mark = 1;
            temp[i] = j;
            if (i == 1) {
              nail[2].mark = 1;
              nail[n].mark = 1;
            } else if (i == n) {
              nail[1].mark = 1;
              nail[n - 1].mark = 1;
            } else {
              nail[i + 1].mark = 1;
              nail[i - 1].mark = 1;
            }
            break;
          }
        }
        if (kr) temp[i] = -1;
      }
      if (k) temp[i] = -1;
    }
    for (i = 1; i <= n; i++)
      if (nail[i].mark == 0) flag = 0;
    if (flag == 0) {
      for (i = 1; i <= n; i++) {
        nail[i].mark = 0;
        temp[i] = 0;
      }
      for (i = 1; i <= m; i++) sign[i] = 0;
      for (i = 2; i <= n; i++) {
        int k = 1;
        if (nail[i].mark == 0) {
          k = 0;
          int kr = 1;
          for (j = 1; j <= m; j++) {
            if (nail[i].l == rod[j] && sign[j] == 0) {
              kr = 0;
              sign[j] = 1;
              nail[i].mark = 1;
              temp[i] = j;
              if (i == n) {
                nail[1].mark = 1;
                nail[n - 1].mark = 1;
              } else {
                nail[i + 1].mark = 1;
                nail[i - 1].mark = 1;
              }
              break;
            }
          }
          if (kr) temp[i] = -1;
        }
        if (k) temp[i] = -1;
      }
    }
    for (i = 1; i <= n; i++)
      if (nail[i].mark == 0) flag = 0;
    if (flag == 0)
      printf("NO\n");
    else {
      printf("YES\n");
      for (i = 1; i <= n; i++) {
        printf("%d", temp[i]);
        if (i == n)
          printf("\n");
        else
          printf(" ");
      }
    }
  }
  return 0;
}
