#include <bits/stdc++.h>
using namespace std;
typedef struct pt {
  long long x;
  long long y;
};
typedef struct circ {
  long long r;
  pt p;
};
int n, m, k;
pt K[10000];
circ c[10000];
int region[10000];
vector<int> out[10000];
int dist[2000][2000];
bool use[2000];
bool inside(pt p1, circ c1) {
  return (p1.x - c1.p.x) * (p1.x - c1.p.x) +
             (p1.y - c1.p.y) * (p1.y - c1.p.y) <=
         c1.r * c1.r;
}
bool cmp(circ c1, circ c2) { return c1.r < c2.r; }
void Dijkstra(int start) {
  priority_queue<pair<int, int> > pq;
  for (int i = 0; i <= m; i++) {
    use[i] = false;
  }
  pq.push(make_pair(0, start));
  while (!pq.empty()) {
    pair<int, int> p = pq.top();
    pq.pop();
    int v = p.second;
    if (use[v]) continue;
    use[v] = true;
    for (int i = 0; i < out[v].size(); i++) {
      int w = out[v][i];
      if (dist[start][w] > dist[start][v] + 1) {
        dist[start][w] = dist[start][v] + 1;
        pq.push(make_pair(-dist[start][w], w));
      }
    }
  }
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d %I64d", &K[i].x, &K[i].y);
  }
  for (int i = 0; i < m; i++) {
    scanf("%I64d %I64d %I64d", &c[i].r, &c[i].p.x, &c[i].p.y);
  }
  sort(c, c + m, cmp);
  for (int i = 1; i <= n; i++) {
    region[i] = m;
    for (int j = 0; j < m; j++) {
      if (inside(K[i], c[j])) {
        region[i] = j;
        break;
      }
    }
  }
  for (int i = 0; i <= m; i++) {
    for (int j = 0; j <= m; j++) {
      dist[i][j] = 10000;
      if (i == j) dist[i][j] = 0;
    }
    bool use = false;
    for (int j = i + 1; j < m; j++) {
      if (inside(c[i].p, c[j])) {
        use = true;
        out[j].push_back(i);
        out[i].push_back(j);
        break;
      }
    }
    if (!use && i != m) {
      out[i].push_back(m);
      out[m].push_back(i);
    }
  }
  for (int i = 0; i <= m; i++) {
    Dijkstra(i);
  }
  for (int i = 0; i < k; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d\n", dist[region[a]][region[b]]);
  }
}
