#include <bits/stdc++.h>
using namespace std;
long long points[1002][2];
long long circle[1002][3];
vector<long long> tree[1002];
bool mark[1002];
vector<long long> paths[1002];
long long inside[1002];
long long dist2(long long a, long long b, long long c, long long d) {
  return (a - c) * (a - c) + (b - d) * (b - d);
}
void dfs(long long v, long long parent) {
  mark[v] = 1;
  if (parent != -1) paths[v] = paths[parent];
  paths[v].push_back(v);
  for (long long i = 0; i < tree[v].size(); i++)
    if (!mark[tree[v][i]]) dfs(tree[v][i], v);
}
int main() {
  long long n, m, k, a, b, p;
  cin >> n >> m >> k;
  for (long long i = 0; i < n; i++) cin >> points[i][0] >> points[i][1];
  for (long long i = 0; i < m; i++)
    cin >> circle[i][0] >> circle[i][1] >> circle[i][2];
  for (long long i = 0; i < m; i++) {
    long long parent = m;
    long long min_radius = 2000000000;
    for (long long j = 0; j < m; j++) {
      if (circle[j][0] <= circle[i][0]) continue;
      if (dist2(circle[i][1], circle[i][2], circle[j][1], circle[j][2]) >
          circle[j][0] * circle[j][0])
        continue;
      if (min_radius > circle[j][0]) {
        parent = j;
        min_radius = circle[j][0];
      }
    }
    tree[parent].push_back(i);
  }
  for (long long i = 0; i < n; i++) {
    long long parent = m;
    long long min_radius = 2000000000;
    for (long long j = 0; j < m; j++) {
      if (dist2(points[i][0], points[i][1], circle[j][1], circle[j][2]) >
          circle[j][0] * circle[j][0])
        continue;
      if (min_radius > circle[j][0]) {
        parent = j;
        min_radius = circle[j][0];
      }
    }
    inside[i] = parent;
  }
  dfs(m, -1);
  for (long long i = 0; i < k; i++) {
    cin >> a >> b;
    a = inside[a - 1];
    b = inside[b - 1];
    p = 0;
    while (p < min(paths[a].size(), paths[b].size()) &&
           paths[a][p] == paths[b][p])
      p++;
    cout << (long long)paths[a].size() + (long long)paths[b].size() - p - p
         << endl;
  }
  return 0;
}
