#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
const double EPS = 1e-6;
int n, m, k;
int kx[MAXN], ky[MAXN];
int cx[MAXN], cy[MAXN], r[MAXN];
int ind[MAXN];
int deep[MAXN];
int father[MAXN][25];
int num[MAXN];
int root;
vector<int> e[MAXN], E[MAXN];
bool contain(int big, int small) {
  if (r[big] <= r[small]) return false;
  long long dis = (long long)(cx[big] - cx[small]) * (cx[big] - cx[small]) +
                  (long long)(cy[big] - cy[small]) * (cy[big] - cy[small]);
  if (dis < (long long)(r[big] - r[small]) * (r[big] - r[small])) return true;
  return false;
}
void BFS() {
  queue<int> q;
  q.push(root);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < e[u].size(); i++) {
      int v = e[u][i];
      if ((--ind[v]) == 0) {
        q.push(v);
        E[u].push_back(v);
      }
    }
  }
}
void DFS(int u, int dep) {
  deep[u] = dep;
  for (int i = 0; i < E[u].size(); i++) {
    int v = E[u][i];
    father[v][0] = u;
    DFS(v, dep + 1);
  }
}
void get_father() {
  for (int i = 1; i <= 20; i++)
    for (int j = 1; j <= root; j++)
      father[j][i] = father[father[j][i - 1]][i - 1];
}
int lca(int u, int v) {
  if (deep[u] < deep[v]) swap(u, v);
  for (int i = 20; i >= 0; i--)
    if (deep[father[u][i]] >= deep[v]) u = father[u][i];
  if (u == v) return u;
  for (int i = 20; i >= 0; i--)
    if (father[u][i] != father[v][i]) {
      u = father[u][i];
      v = father[v][i];
    }
  return father[u][0];
}
bool inside(int i, int j) {
  long long dis = (long long)(kx[i] - cx[j]) * (kx[i] - cx[j]) +
                  (long long)(ky[i] - cy[j]) * (ky[i] - cy[j]);
  if (dis < (long long)(r[j]) * r[j]) return true;
  return false;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) scanf("%d%d", &kx[i], &ky[i]);
  for (int i = 1; i <= m; i++) scanf("%d%d%d", &r[i], &cx[i], &cy[i]);
  for (int i = 1; i <= m; i++) ind[i] = 0;
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= m; j++) {
      if (contain(i, j)) {
        e[i].push_back(j);
        ind[j]++;
      }
    }
  root = m + 1;
  for (int i = 1; i <= m; i++) {
    e[root].push_back(i);
    ind[i]++;
  }
  BFS();
  memset(father, 0, sizeof(father));
  memset(deep, 0, sizeof(deep));
  DFS(root, 1);
  get_father();
  for (int i = 1; i <= n; i++) {
    num[i] = m + 1;
    for (int j = 1; j <= m; j++)
      if (inside(i, j) && deep[j] > deep[num[i]]) {
        num[i] = j;
      }
  }
  for (int i = 1; i <= k; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u = num[u], v = num[v];
    int cr = lca(u, v);
    printf("%d\n", deep[u] + deep[v] - 2 * deep[cr]);
  }
  return 0;
}
