#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct Point {
  T x, y;
  Point() {}
  Point(T x_, T y_) : x(x_), y(y_) {}
  using pair = std::pair<T, T>;
  explicit operator pair() const { return pair(x, y); }
  friend bool operator==(const Point& a, const Point& b) {
    return pair(a) == pair(b);
  }
  friend bool operator!=(const Point& a, const Point& b) {
    return pair(a) != pair(b);
  }
  friend bool operator<(const Point& a, const Point& b) {
    return pair(a) < pair(b);
  }
  friend bool operator<=(const Point& a, const Point& b) {
    return pair(a) <= pair(b);
  }
  friend bool operator>(const Point& a, const Point& b) {
    return pair(a) > pair(b);
  }
  friend bool operator>=(const Point& a, const Point& b) {
    return pair(a) >= pair(b);
  }
  friend std::ostream& operator<<(std::ostream& o, const Point& p) {
    return o << "(" << p.x << "," << p.y << ")";
  }
  friend std::istream& operator>>(std::istream& i, Point& p) {
    return i >> p.x >> p.y;
  }
  Point& operator+=(const Point& p) {
    x += p.x;
    y += p.y;
    return *this;
  }
  Point& operator-=(const Point& p) {
    x -= p.x;
    y -= p.y;
    return *this;
  }
  friend Point operator+(const Point& a, const Point& b) {
    return Point(a) += b;
  }
  friend Point operator-(const Point& a, const Point& b) {
    return Point(a) -= b;
  }
  T cross(const Point& p) const { return x * p.y - y * p.x; }
  T cross(const Point& p, const Point& q) const {
    return (p - *this).cross(q - *this);
  }
};
using Pt = Point<int>;
const int MAXN = 7000;
int A, B;
int N;
struct City {
  Pt pt;
  int id;
  int deg;
  friend bool operator<(const City& a, const City& b) { return a.pt < b.pt; }
} pts[MAXN];
int hsz;
int hull[MAXN];
void solve(int st, int en) {
  if (st == en) return;
  if (pts[st].deg == -1) return solve(st + 1, en);
  if (pts[en].deg == -1) return solve(st, en - 1);
  int len = 0;
  int totdeg = 0;
  for (int i = st; i <= en; i++) {
    if (pts[i].deg == -1) continue;
    len++;
    totdeg += pts[i].deg;
  }
  assert(len);
  assert(totdeg == len - 1);
  assert(len >= 2);
  {
    hsz = 0;
    for (int i = 0; i <= (en - st) * 2; i++) {
      int cur = (i <= (en - st) ? (st + i) : (en + (en - st) - i));
      if (pts[cur].deg == -1) continue;
      while (hsz >= 2 && hull[hsz - 1] != en) {
        if (pts[hull[hsz - 2]].pt.cross(pts[hull[hsz - 1]].pt, pts[cur].pt) <
            0) {
          break;
        } else {
          hsz--;
        }
      }
      hull[hsz++] = cur;
    }
    hsz--;
    assert(hsz >= 2);
    assert(hull[hsz] == hull[0]);
    for (int ind = 0; ind < hsz; ind++) {
      int a = hull[ind], b = hull[ind + 1];
      assert(pts[a].deg != -1 && pts[b].deg != -1);
      if (pts[a].deg == 0 && pts[b].deg > 0) {
        cout << pts[b].id << ' ' << pts[a].id << '\n';
        pts[b].deg--;
        if (pts[b].deg == 0) {
          pts[b].deg = -1;
        } else {
          pts[a].deg = -1;
        }
        return solve(st, en);
      }
    }
  }
  int pref = 0;
  int lsz = 0;
  for (int i = st; i <= en; i++) {
    if (pts[i].deg == -1) continue;
    int suff = pref + (pts[i].deg - 1);
    lsz++;
    if (lsz > 1 && lsz < len && (pref >= 0) != (suff >= 0)) {
      int ldeg, rdeg;
      if (pts[i].deg > 0) {
        assert(pref < 0 && suff >= 0);
        ldeg = -pref;
        rdeg = suff + 1;
        assert(ldeg + rdeg == pts[i].deg);
      } else {
        ldeg = 0;
        rdeg = 0;
      }
      pts[i].deg = ldeg;
      solve(st, i);
      pts[i].deg = rdeg;
      solve(i, en);
      return;
    }
    pref = suff;
  }
  assert(false);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int T;
  cin >> T;
  while (T--) {
    cin >> A >> B;
    N = A + B;
    for (int i = 0; i < A; i++) {
      pts[i].deg = 0;
      pts[i].id = i + 1;
    }
    for (int i = A; i < A + B; i++) {
      cin >> pts[i].deg;
      assert(pts[i].deg > 0);
      pts[i].id = i - A + 1;
    }
    for (int i = 0; i < N; i++) {
      cin >> pts[i].pt;
    }
    sort(pts, pts + N);
    cout << "YES" << '\n';
    solve(0, N - 1);
  }
  return 0;
}
