#include <bits/stdc++.h>
using namespace std;
const int N = 100005, M = 15;
const double EPS = 1e-7;
using ll = long long;
struct Vector {
  int x, y;
} v[M];
struct Node {
  double a;
  int x, y, z;
} w[N * 2];
bool cmpv(const Vector &a, const Vector &b) {
  return atan2(a.y, a.x) < atan2(b.y, b.x);
}
bool cmpw(const Node &a, const Node &b) {
  return abs(a.a - b.a) < EPS ? a.z < b.z : a.a < b.a;
}
int x[N], y[N], a[N], c[N], cn, sx, sy, px[N], py[N], t[N];
ll ans[N], s[N];
inline int lowbit(int x) { return x & -x; }
void add(int x, int v) {
  while (x <= N - 5) s[x] += v, x += lowbit(x);
}
ll query(int x) {
  ll ret = 0;
  while (x) ret += s[x], x -= lowbit(x);
  return ret;
}
inline int calc(int x) { return upper_bound(c + 1, c + cn + 1, x) - c - 1; }
int main() {
  ios::sync_with_stdio(false);
  int kk, n, q;
  cin >> kk >> n >> q;
  for (int i = 1; i <= kk; i++) {
    cin >> v[i].x >> v[i].y;
    if (v[i].x < 0) v[i].x = -v[i].x, v[i].y = -v[i].y;
    if (!v[i].x && v[i].y < 0) v[i].y = -v[i].y;
    sx += v[i].x;
    sy += v[i].y;
  }
  sort(v + 1, v + kk + 1, cmpv);
  for (int i = 1; i <= n; i++) cin >> x[i] >> y[i] >> a[i], c[i] = x[i];
  sort(c + 1, c + n + 1);
  cn = unique(c + 1, c + n + 1) - c - 1;
  for (int i = 1; i <= q; i++)
    cin >> px[i] >> py[i] >> t[i], px[i] -= sx * t[i], py[i] -= sy * t[i],
        t[i] <<= 1;
  for (int i = 1; i <= kk; i++) {
    if (!v[i].x) {
      for (int j = 1; j <= q; j++) py[j] += v[i].y * t[j];
      continue;
    }
    for (int j = 1; j <= n; j++)
      w[j] = {y[j] - 1.0 * x[j] * v[i].y / v[i].x, x[j], a[j], 0};
    for (int j = 1; j <= q; j++)
      w[n + j] = {py[j] - 1.0 * px[j] * v[i].y / v[i].x, px[j],
                  px[j] + v[i].x * t[j], -j},
            px[j] += v[i].x * t[j], py[j] += v[i].y * t[j];
    sort(w + 1, w + n + q + 1, cmpw);
    memset(s, 0, sizeof(s));
    for (int j = 1; j <= n + q; j++)
      if (w[j].z)
        ans[-w[j].z] -= query(calc(w[j].y)) - query(calc(w[j].x - (i < 2)));
      else
        add(calc(w[j].x), w[j].y);
  }
  for (int i = 1; i <= kk; i++) {
    if (!v[i].x) break;
    for (int j = 1; j <= n; j++)
      w[j] = {y[j] - 1.0 * x[j] * v[i].y / v[i].x, x[j], a[j], 0};
    for (int j = 1; j <= q; j++)
      w[n + j] = {py[j] - 1.0 * px[j] * v[i].y / v[i].x, px[j] - v[i].x * t[j],
                  px[j], j},
            px[j] -= v[i].x * t[j], py[j] -= v[i].y * t[j];
    sort(w + 1, w + n + q + 1, cmpw);
    memset(s, 0, sizeof(s));
    for (int j = 1; j <= n + q; j++)
      if (w[j].z)
        ans[w[j].z] += query(calc(w[j].y - (i > 1))) - query(calc(w[j].x - 1));
      else
        add(calc(w[j].x), w[j].y);
  }
  for (int i = 1; i <= q; i++) cout << ans[i] << endl;
  return 0;
}
