#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const int INF = 0x3f3f3f3f;
int n, m, k;
pair<long long, long long> knights[N];
int dis[N][N];
int in[N];
vector<int> e[N];
struct Round {
  long long x, y, r;
} r[N];
long long d(long long a, long long b) { return a * a + b * b; }
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) cin >> knights[i].first >> knights[i].second;
  for (int i = 0; i < m; i++) cin >> r[i].r >> r[i].x >> r[i].y;
  for (int i = 0; i < m; i++) {
    int maxi = m;
    for (int j = 0; j < m; j++) {
      if (i == j) continue;
      if (r[i].r < r[j].r &&
          d(r[i].x - r[j].x, r[i].y - r[j].y) < d(r[i].r - r[j].r, 0)) {
        if (maxi == m || r[maxi].r > r[j].r) maxi = j;
      }
    }
    e[i].push_back(maxi);
    e[maxi].push_back(i);
  }
  for (int i = 0; i <= m; i++) {
    for (int j = 0; j <= m; j++) dis[i][j] = INF;
    dis[i][i] = 0;
    queue<int> Q;
    Q.push(i);
    while (!Q.empty()) {
      int u = Q.front();
      Q.pop();
      int sz = e[u].size();
      for (int j = 0; j < sz; j++) {
        int v = e[u][j];
        if (dis[i][v] > dis[i][u] + 1) dis[i][v] = dis[i][u] + 1, Q.push(v);
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    int mini = m;
    for (int j = 0; j < m; j++) {
      if (d(knights[i].first - r[j].x, knights[i].second - r[j].y) <
          r[j].r * r[j].r)
        if (mini == m || r[mini].r > r[j].r) mini = j;
    }
    in[i] = mini;
  }
  int u, v;
  for (int i = 0; i < k; i++) {
    cin >> u >> v;
    cout << dis[in[u]][in[v]] << endl;
  }
  return 0;
}
