#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int MX = 15;
int n, m, k, o[N], x[N], y[N], dep[N], f[N][MX];
vector<int> v[N];
struct circle {
  int x, y, r;
  void read() { scanf("%d%d%d", &r, &x, &y); }
  bool operator<(const circle& c) const { return r < c.r; }
  bool contain(int _x, int _y) {
    long long t1 = pow(x - _x, 2);
    long long t2 = pow(y - _y, 2);
    return t1 <= (long long)r * r - t2;
  }
  bool contain(circle c) { return contain(c.x, c.y); }
} a[N];
void dfs(int x, int pa) {
  int y;
  f[x][0] = pa;
  for (int i = 0; i < v[x].size(); i++) {
    y = v[x][i];
    if (y == pa) continue;
    dep[y] = dep[x] + 1;
    dfs(y, x);
  }
}
int getLca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  int len = dep[x] - dep[y];
  for (int i = 0; i < MX; i++)
    if ((len >> i) & 1) x = f[x][i];
  if (x == y) return x;
  for (int i = MX - 1; i >= 0; i--)
    if (f[x][i] != f[y][i]) {
      x = f[x][i];
      y = f[y][i];
    }
  return f[x][0];
}
int main() {
  int p, q;
  scanf("%d%d%d", &m, &n, &k);
  for (int i = 0; i < m; i++) scanf("%d%d", x + i, y + i);
  for (int i = 0; i < n; i++) a[i].read();
  sort(a, a + n);
  for (int i = 0; i < m; i++) {
    o[i] = n;
    for (int j = 0; j < n; j++) {
      if (a[j].contain(x[i], y[i])) {
        o[i] = j;
        break;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    int jj = n;
    for (int j = i + 1; j < n; j++) {
      if (a[j].contain(a[i])) {
        jj = j;
        break;
      }
    }
    v[jj].push_back(i);
    v[i].push_back(jj);
  }
  n++;
  dfs(0, -1);
  for (int j = 1; j < MX; j++)
    for (int i = 0; i < n; i++)
      if (~f[i][j - 1]) f[i][j] = f[f[i][j - 1]][j - 1];
  while (k--) {
    scanf("%d%d", &p, &q);
    p--;
    q--;
    p = o[p];
    q = o[q];
    int lca = getLca(p, q);
    printf("%d\n", dep[p] + dep[q] - 2 * dep[lca]);
  }
  return 0;
}
