#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline void chkmin(T1 &x, T2 y) {
  if (x > y) x = y;
}
template <typename T1, typename T2>
inline void chkmax(T1 &x, T2 y) {
  if (x < y) x = y;
}
inline int readChar();
template <class T = int>
inline T readInt();
template <class T>
inline void writeInt(T x, char end = 0);
inline void writeChar(int x);
inline void writeWord(const char *s);
static const int buf_size = 4096;
inline int getChar() {
  static char buf[buf_size];
  static int len = 0, pos = 0;
  if (pos == len) {
    pos = 0, len = fread(buf, 1, buf_size, stdin);
  }
  if (pos == len) {
    return -1;
  }
  return buf[pos++];
}
inline int readChar() {
  int c = getChar();
  while (c <= 32) {
    c = getChar();
  }
  return c;
}
template <class T>
inline T readInt() {
  int s = 1, c = readChar();
  T x = 0;
  if (c == '-') s = -1, c = getChar();
  while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getChar();
  return s == 1 ? x : -x;
}
static int write_pos = 0;
static char write_buf[buf_size];
inline void writeChar(int x) {
  if (write_pos == buf_size)
    fwrite(write_buf, 1, buf_size, stdout), write_pos = 0;
  write_buf[write_pos++] = x;
}
template <class T>
inline void writeInt(T x, char end) {
  if (x < 0) writeChar('-'), x = -x;
  char s[24];
  int n = 0;
  while (x || !n) s[n++] = '0' + x % 10, x /= 10;
  while (n--) writeChar(s[n]);
  if (end) writeChar(end);
}
inline void writeWord(const char *s) {
  while (*s) writeChar(*s++);
}
struct Flusher {
  ~Flusher() {
    if (write_pos) fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
  }
} flusher;
const int MAXN = 100228;
const int MAXK = 10;
const double eps = 1e-7;
struct point {
  int x, y;
};
point v[MAXK];
struct query {
  double a;
  int x, y, z;
};
query w[MAXN * 2];
bool compv(const point &a, const point &b) {
  return atan2(a.y, a.x) < atan2(b.y, b.x);
}
bool compw(const query &a, const query &b) {
  return (fabs(a.a - b.a) < eps ? a.z < b.z : a.a < b.a);
}
int a[MAXN], c[MAXN];
int cn, sx, sy;
int px[MAXN], py[MAXN], t[MAXN];
long long ans[MAXN], s[MAXN];
inline void add(int k, int x) {
  for (; k <= MAXN; k += k & -k) {
    s[k] += x;
  }
}
int x[MAXN], y[MAXN];
long long sum(int k) {
  long long res = 0;
  for (; k; k -= k & -k) {
    res += s[k];
  }
  return res;
}
int main() {
  int k = readInt(), n = readInt(), q = readInt();
  for (int i = 1; i <= k; i++) {
    v[i].x = readInt();
    v[i].y = readInt();
    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 + k + 1, compv);
  for (int i = 1; i <= n; i++) {
    c[i] = x[i] = readInt(), y[i] = readInt(), a[i] = readInt();
  }
  sort(c + 1, c + n + 1);
  cn = unique(c + 1, c + n + 1) - c - 1;
  for (int i = 1; i <= q; i++) {
    px[i] = readInt(), py[i] = readInt(), t[i] = readInt();
    px[i] -= sx * t[i];
    py[i] -= sy * t[i];
    t[i] <<= 1;
  }
  for (int i = 1; i <= k; 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] = (query){y[j] - (double)x[j] * v[i].y / v[i].x, x[j], a[j], 0};
    }
    for (int j = 1; j <= q; j++) {
      w[n + j] = (query){py[j] - (double)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, compw);
    memset(s, 0, sizeof(s));
    for (int j = 1; j <= n + q; j++) {
      if (w[j].z) {
        ans[-w[j].z] -=
            sum((upper_bound(c + 1, c + cn + 1, w[j].y) - c - 1)) -
            sum((upper_bound(c + 1, c + cn + 1, w[j].x - (i < 2)) - c - 1));
      } else {
        add((upper_bound(c + 1, c + cn + 1, w[j].x) - c - 1), w[j].y);
      }
    }
  }
  for (int i = 1; i <= k; i++) {
    if (!v[i].x) {
      break;
    }
    for (int j = 1; j <= n; j++) {
      w[j] = (query){y[j] - (double)x[j] * v[i].y / v[i].x, x[j], a[j], 0};
    }
    for (int j = 1; j <= q; j++) {
      w[n + j] = (query){py[j] - (double)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, compw);
    memset(s, 0, sizeof(s));
    for (int j = 1; j <= n + q; j++) {
      if (w[j].z) {
        ans[w[j].z] +=
            sum((upper_bound(c + 1, c + cn + 1, w[j].y - (i > 1)) - c - 1)) -
            sum((upper_bound(c + 1, c + cn + 1, w[j].x - 1) - c - 1));
      } else {
        add((upper_bound(c + 1, c + cn + 1, w[j].x) - c - 1), w[j].y);
      }
    }
  }
  for (int i = 1; i <= q; i++) {
    writeInt(ans[i], '\n');
  }
  return 0;
}
