#include <bits/stdc++.h>
using namespace std;
struct C {
  complex<double> c;
  double r;
  C(complex<double> c, double r) : c(c), r(r) { ; }
};
double dist(const complex<double> &a, const complex<double> &b) {
  return abs(a - b);
}
double dist(double ax, double ay, double bx, double by) {
  return sqrt((ax - bx) * (ax - bx) + (ay - by) * (ay - by));
}
bool incircle(const C &c, const complex<double> &p) {
  if (dist(c.c, p) < c.r) return true;
  return false;
}
int memo[1000][1000];
bool cmemo[1000][1000];
const int inf = 1000000;
int main() {
  int n, m, k, i, j, x, y, r, a, b, l;
  scanf("%d %d %d", &n, &m, &k);
  vector<complex<double> > control;
  for (i = 0; i < 1000; ++i)
    for (j = 0; j < 1000; ++j) memo[i][j] = inf;
  for (i = 0; i < n; ++i) {
    scanf("%d %d", &x, &y);
    control.push_back(complex<double>(x, y));
  }
  for (i = 0; i < m; ++i) {
    scanf("%d %d %d", &r, &x, &y);
    for (j = 0; j < n; ++j)
      if (incircle(C(complex<double>(x, y), r), control[j])) cmemo[j][i] = true;
  }
  for (i = 0; i < k; ++i) {
    scanf("%d %d", &a, &b);
    a--, b--;
    if (memo[a][b] != inf) {
      printf("%d\n", memo[a][b]);
      continue;
    }
    int ans = 0;
    for (l = 0; l < m; ++l)
      if (cmemo[a][l] ^ cmemo[b][l]) ans++;
    printf("%d\n", ans);
    memo[b][a] = memo[a][b] = ans;
  }
}
