#include <bits/stdc++.h>   using namespace std;   inline int read() {     int x, f = 1;     char c;     while ((c = getchar()) <  0  || c >  9 )       if (c ==  - ) f = 0;     for (x = c -  0 ; (c = getchar()) >=  0  && c <=  9 ;) x = x * 10 + c -  0 ;     return f ? x : -x;   }   struct vec {     int x, y;   } v[10 + 5];   struct work {     double a;     int x, y, z;   } w[100000 * 2 + 5];   bool cmpv(const vec& a, const vec& b) {     return atan2(a.y, a.x) < atan2(b.y, b.x);   }   bool cmpw(const work& a, const work& b) {     return fabs(a.a - b.a) < 1e-7 ? a.z < b.z : a.a < b.a;   }   int x[100000 + 5], y[100000 + 5], a[100000 + 5], c[100000 + 5], cn, sx, sy,       px[100000 + 5], py[100000 + 5], t[100000 + 5];   long long ans[100000 + 5], s[100000 + 5];   void add(int k, int x) {     for (; k <= 100000; k += k & -k) s[k] += x;   }   long long sum(int k) {     long long res = 0;     for (; k; k -= k & -k) res += s[k];     return res;   }   int main() {     int k, n, q, i, j;     k = read();     n = read();     q = read();     for (i = 1; i <= k; ++i) {       v[i].x = read();       v[i].y = read();       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, cmpv);     for (i = 1; i <= n; ++i) c[i] = x[i] = read(), y[i] = read(), a[i] = read();     sort(c + 1, c + n + 1);     cn = unique(c + 1, c + n + 1) - c - 1;     for (i = 1; i <= q; ++i)       px[i] = read(), py[i] = read(), t[i] = read(), px[i] -= sx * t[i],       py[i] -= sy * t[i], t[i] <<= 1;     for (i = 1; i <= k; ++i) {       if (!v[i].x) {         for (j = 1; j <= q; ++j) py[j] += v[i].y * t[j];         continue;       }       for (j = 1; j <= n; ++j)         w[j] = (work){y[j] - (double)x[j] * v[i].y / v[i].x, x[j], a[j], 0};       for (j = 1; j <= q; ++j)         w[n + j] = (work){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, cmpw);       memset(s, 0, sizeof(s));       for (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 (i = 1; i <= k; ++i) {       if (!v[i].x) break;       for (j = 1; j <= n; ++j)         w[j] = (work){y[j] - (double)x[j] * v[i].y / v[i].x, x[j], a[j], 0};       for (j = 1; j <= q; ++j)         w[n + j] = (work){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, cmpw);       memset(s, 0, sizeof(s));       for (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 (i = 1; i <= q; ++i) printf( %I64d n , ans[i]);   }