#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
const int inf = 0x3f3f3f3f;
struct point {
  int x, y;
  point(int _x = 0, int _y = 0) : x(_x), y(_y) {}
};
struct circle {
  int r;
  point c;
  circle() {}
  circle(int _r, point _c) : r(_r), c(_c) {}
};
long long Distance(const point &a, const point &b) {
  return ((long long)a.x - b.x) * (a.x - b.x) +
         ((long long)a.y - b.y) * (a.y - b.y);
}
int n, m, k;
int dis[maxn][maxn];
vector<int> edge[maxn];
point p[maxn];
circle cir[maxn];
vector<int> vec;
int q[maxn];
int vis[maxn];
bool cmp(int a, int b) { return cir[a].r < cir[b].r; }
void BFS(int s) {
  int top = 0, end = 0;
  memset(vis, -1, sizeof(vis));
  vis[s] = 0;
  q[end++] = s;
  dis[s][s] = 0;
  while (top != end) {
    int u = q[top++];
    for (int i = 0; i < edge[u].size(); i++) {
      int v = edge[u][i];
      if (vis[v] != -1) continue;
      vis[v] = vis[u] + 1;
      dis[s][v] = vis[v];
      q[end++] = v;
    }
  }
}
int main() {
  int x, y;
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < n; i++) scanf("%d %d", &p[i].x, &p[i].y);
  for (int i = 0; i < m; i++)
    scanf("%d %d %d", &cir[i].r, &cir[i].c.x, &cir[i].c.y);
  for (int i = 0; i < n; i++) {
    vec.clear();
    for (int j = 0; j < m; j++)
      if (Distance(p[i], cir[j].c) < (long long)cir[j].r * cir[j].r)
        vec.push_back(j);
    sort(vec.begin(), vec.end(), cmp);
    vec.push_back(m);
    edge[i].push_back(n + vec[0]);
    edge[n + vec[0]].push_back(i);
    for (int i = 0; i < vec.size() - 1; i++) {
      edge[n + vec[i]].push_back(n + vec[i + 1]);
      edge[n + vec[i + 1]].push_back(n + vec[i]);
    }
  }
  for (int i = 0; i <= m; i++) {
    sort(edge[i + n].begin(), edge[i + n].end());
    edge[i + n].resize(unique(edge[i + n].begin(), edge[i + n].end()) -
                       edge[i + n].begin());
  }
  for (int i = 0; i < n; i++) BFS(i);
  while (k--) {
    scanf("%d %d", &x, &y);
    if (x == y)
      printf("0\n");
    else
      printf("%d\n", dis[x - 1][y - 1] - 2);
  }
  return 0;
}
