#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;   }