#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x, y;
  void read() { scanf("%d%d", &x, &y); }
} K[1003];
double dist(const Point &A, const Point &B) {
  return sqrt(1.0 * (A.x - B.x) * (A.x - B.x) +
              1.0 * (A.y - B.y) * (A.y - B.y));
}
struct Circle {
  Point C;
  int R;
  void read() {
    scanf("%d", &R);
    C.read();
  }
} Cir[1003];
bool Cmp(const Circle &A, const Circle &B) { return A.R < B.R; }
int fa[1003], d[1003], b[1003];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) K[i].read();
  for (int i = 1; i <= m; i++) Cir[i].read();
  sort(Cir + 1, Cir + m + 1, Cmp);
  for (int i = 1; i <= m; i++) {
    for (int j = i + 1; j <= m; j++)
      if (dist(Cir[i].C, Cir[j].C) < Cir[j].R - Cir[i].R) {
        fa[i] = j;
        break;
      }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (dist(K[i], Cir[j].C) < Cir[j].R) {
        b[i] = j;
        break;
      }
  for (int i = m; i; i--) d[i] = d[fa[i]] + 1;
  for (int i = 1, A, B; i <= k; i++) {
    scanf("%d%d", &A, &B);
    A = b[A], B = b[B];
    int res = 0;
    if (d[A] < d[B]) swap(A, B);
    while (d[A] != d[B]) res++, A = fa[A];
    while (A != B) res += 2, A = fa[A], B = fa[B];
    printf("%d\n", res);
  }
  return 0;
}
