#include <bits/stdc++.h>
struct type_circle {
  int x, y, r;
};
struct type_point {
  int x, y;
};
type_circle C[1001];
type_point P[1001];
int parent[1001], cparent[1001];
int m, n, k;
int compare_circles(const void* a, const void* b) {
  return ((type_circle*)a)->r - ((type_circle*)b)->r;
}
int get_Points_parent(int i) {
  if (parent[i] != -1) return parent[i];
  long long R2, X2, Y2;
  parent[i] = 0;
  for (int j = 1; j <= m; j++) {
    X2 = P[i].x - C[j].x;
    X2 *= X2;
    Y2 = P[i].y - C[j].y;
    Y2 *= Y2;
    R2 = C[j].r;
    R2 *= R2;
    if (R2 > X2 + Y2) {
      parent[i] = j;
      break;
    }
  }
  return parent[i];
}
int get_fence_parent(int i) {
  long long Rsqr, dxsqr, dysqr;
  if (cparent[i] != -1) return cparent[i];
  cparent[i] = 0;
  for (int j = i; j <= m; j++) {
    dxsqr = C[i].x - C[j].x;
    dxsqr *= dxsqr;
    dysqr = C[i].y - C[j].y;
    dysqr *= dysqr;
    Rsqr = C[i].r - C[j].r;
    Rsqr *= Rsqr;
    if (Rsqr > dxsqr + dysqr) {
      cparent[i] = j;
      break;
    }
  }
  return cparent[i];
}
int main() {
  int a, b, P1, P2, R1, R2, jumps;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &P[i].x, &P[i].y);
    parent[i] = -1;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &C[i].r, &C[i].x, &C[i].y);
    cparent[i] = -1;
  }
  C[0].r = 2100000000;
  qsort(C + 1, m, sizeof(type_circle), compare_circles);
  cparent[m] = 0;
  for (int i = 0; i < k; i++) {
    scanf("%d%d", &a, &b);
    P1 = get_Points_parent(a);
    R1 = C[P1].r;
    P2 = get_Points_parent(b);
    R2 = C[P2].r;
    jumps = 0;
    while (P1 != P2) {
      if (R1 > R2) {
        P2 = get_fence_parent(P2);
        R2 = C[P2].r;
      } else {
        P1 = get_fence_parent(P1);
        R1 = C[P1].r;
      }
      jumps++;
    }
    printf("%d\n", jumps);
  }
  return 0;
}
