#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using point = struct Point {
  LL x, y;
  Point(LL x = 0, LL y = 0) : x(x), y(y) {}
  void in() { scanf("%I64d%I64d", &x, &y); }
  void pr() { cout << x << ' ' << y << endl; }
};
using posit = struct Position {
  int x, y, id;
  Position(int x = 0, int y = 0, int id = 0) : x(x), y(y), id(id) {}
  void pr() { cout << x << ' ' << y << ' ' << id << endl; }
};
point operator+(const point& a, const point& b) {
  return {a.x + b.x, a.y + b.y};
}
point operator-(const point& a, const point& b) {
  return {a.x - b.x, a.y - b.y};
}
point operator*(const point& a, const int& b) { return {a.x * b, a.y * b}; }
LL operator*(const point& a, const point& b) { return a.x * b.x + a.y * b.y; }
LL operator^(const point& a, const point& b) { return a.x * b.y - a.y * b.x; }
bool operator<(const point& a, const point& b) {
  return a.x == b.x ? a.y < b.y : a.x < b.x;
}
int sgn(int a) { return (a > 0ll) - (a < 0ll); }
bool operator<(const posit& a, const posit& b) {
  if (a.y != b.y) return a.y > b.y;
  if (sgn(a.id) != sgn(b.id)) return a.id > b.id;
  return a.x < b.x;
}
const int NN = 1e5 + 10;
point a[NN], b[NN], c[1000], d[1000], e[1000];
point g[NN], h[NN];
int car[NN], days[NN];
LL x[NN << 1], y[NN << 1], B[NN << 1], ans[NN];
int nx, ny;
posit p[NN << 1];
int sgn(LL a) { return (a > 0ll) - (a < 0ll); }
point change(point p, point a, point b) {
  return point((p.x * b.y - b.x * p.y) * sgn(a.x * b.y - a.y * b.x),
               (a.x * p.y - p.x * a.y) * sgn(a.x * b.y - a.y * b.x));
}
int main() {
  LL tot = 0;
  int nn, m, q, n = 1;
  scanf("%d %d %d", &nn, &m, &q);
  for (int i = 0; i < nn; i++) e[i].in();
  for (int i = 0; i < m; i++) a[i].in(), scanf("%d", car + i), tot += car[i];
  for (int i = 0; i < q; i++)
    b[i].in(), scanf("%d", days + i), ans[i + 1] = tot;
  for (int g = 0; g < nn; g++) {
    for (int i = 0; i < n; i++) {
      d[i + n] = c[i] - e[g];
      d[i] = c[i] + e[g];
    }
    n <<= 1;
    sort(d, d + n);
    int m = 0;
    for (int i = 0; i < n; i++) {
      for (; m > 1 && (d[i] - c[m - 2] ^ c[m - 1] - c[m - 2]) >= 0ll; m--)
        ;
      c[m++] = d[i];
    }
    for (int i = n - 1, j = m; i--;) {
      for (; m > j && (d[i] - c[m - 2] ^ c[m - 1] - c[m - 2]) >= 0ll; m--)
        ;
      c[m++] = d[i];
    }
    n = m - 1;
  }
  c[n + 1] = c[1];
  for (int F = 0; F < n; F++) {
    for (int i = nx = ny = 0; i < m; i++) {
      g[i] = change(a[i], c[F + 2] - c[F + 1], c[F + 1] - c[F]);
      x[nx++] = g[i].x;
      y[ny++] = g[i].y;
      p[i].id = -car[i];
    }
    for (int i = 0; i < q; i++) {
      h[i] = change(b[i] + c[F + 1] * days[i], c[F + 2] - c[F + 1],
                    c[F + 1] - c[F]);
      x[nx++] = h[i].x;
      y[ny++] = h[i].y;
      p[i + m].id = i + 1;
    }
    sort(x, x + nx);
    nx = unique(x, x + nx) - x;
    sort(y, y + ny);
    ny = unique(y, y + ny) - y;
    for (int i = 0; i < m; i++) {
      p[i].x = lower_bound(x, x + nx, g[i].x) - x + 1;
      p[i].y = lower_bound(y, y + ny, g[i].y) - y + 1;
    }
    for (int i = 0; i < q; i++) {
      p[i + m].x = lower_bound(x, x + nx, h[i].x) - x + 1;
      p[i + m].y = lower_bound(y, y + ny, h[i].y) - y + 1;
    }
    sort(p, p + m + q);
    for (int i = 1; i <= nx; i++) B[i] = 0;
    for (int i = 0; i < m + q; i++) {
      if (p[i].id > 0) {
        LL t = 0;
        for (int u = p[i].x; u <= nx; u += u & -u) t += B[u];
        ans[p[i].id] -= t;
      } else {
        LL t = -p[i].id;
        for (int u = p[i].x; u > 0; u -= u & -u) B[u] += t;
      }
    }
  }
  for (int i = 1; i <= q; i++) printf("%I64d\n", ans[i]);
  return 0;
}
