#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const long long LLINF = 9223372036854775807LL;
const int maxn = 1010;
int px[maxn], py[maxn];
int cr[maxn], cx[maxn], cy[maxn];
int ind[maxn];
int par[maxn];
long long dist(int x1, int y1, int x2, int y2) {
  return ((long long)x1 - x2) * ((long long)x1 - x2) +
         ((long long)y1 - y2) * ((long long)y1 - y2);
}
vector<int> a[maxn];
int di[maxn];
int d[maxn][maxn];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; ++i) scanf("%d%d", &px[i], &py[i]);
  for (int i = 0; i < m; ++i) scanf("%d%d%d", &cr[i], &cx[i], &cy[i]);
  cr[m] = 2000000010;
  cx[m] = 0;
  cy[m++] = 0;
  for (int i = 0; i < n; ++i) {
    ind[i] = -1;
    for (int j = 0; j < m; ++j) {
      if (dist(px[i], py[i], cx[j], cy[j]) <=
          ((long long)cr[j]) * ((long long)cr[j])) {
        if (ind[i] == -1 || cr[j] < cr[ind[i]]) ind[i] = j;
      }
    }
  }
  for (int i = 0; i < m; ++i) {
    par[i] = -1;
    for (int j = 0; j < m; ++j) {
      if (cr[i] < cr[j] && dist(cx[i], cy[i], cx[j], cy[j]) <=
                               ((long long)cr[j]) * ((long long)cr[j])) {
        if (par[i] == -1 || cr[j] < cr[par[i]]) par[i] = j;
      }
    }
    if (par[i] != -1) a[i].push_back(par[i]), a[par[i]].push_back(i);
  }
  for (int i = 0; i < m; ++i) {
    memset(di, -1, sizeof(di));
    di[i] = 0;
    queue<int> q;
    q.push(i);
    while (!q.empty()) {
      int cur = q.front();
      q.pop();
      for (int j = 0; j < int((a[cur]).size()); ++j) {
        int to = a[cur][j];
        if (di[to] == -1) {
          di[to] = di[cur] + 1;
          q.push(to);
        }
      }
    }
    for (int j = 0; j < m; ++j) d[i][j] = di[j];
  }
  for (int i = 0; i < k; ++i) {
    int fr, to;
    scanf("%d%d", &fr, &to);
    fr--;
    to--;
    printf("%d\n", d[ind[fr]][ind[to]]);
  }
  return 0;
}
