#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
struct Point {
  int x, y;
  Point() { x = y = 0; }
  Point(int ix, int iy) {
    x = ix;
    y = iy;
  }
  Point operator+(Point a) { return Point(x + a.x, y + a.y); }
  Point operator-(Point a) { return Point(x - a.x, y - a.y); }
  bool operator<(const Point &a) const {
    return (x == a.x) ? (y < a.y) : (x < a.x);
  }
};
struct Event {
  int when, type, y, val, i;
  Event() { when = type = -1; }
  Event(int iwhen, int itype, int iy, int ival, int ii) {
    when = iwhen;
    type = itype;
    y = iy;
    val = ival;
    i = ii;
  }
  bool operator<(const Event &a) const {
    if (when != a.when) return when < a.when;
    if (type != a.type) return type < a.type;
    if (y != a.y) return y < a.y;
    if (val != a.val) return val < a.val;
    return i < a.i;
  }
};
inline int cross(Point b, Point a, Point c) {
  b = b - a;
  c = c - a;
  return b.x * c.y - b.y * c.x;
}
void get(int k, vector<Point> &v, vector<Point> &up, vector<Point> &dw) {
  vector<Point> a;
  for (int mask = 0; mask < (1 << k); mask++) {
    Point pt;
    for (int i = 0; i < k; i++) {
      if ((mask >> i) & 1) {
        pt = pt + v[i];
      } else {
        pt = pt - v[i];
      }
    }
    a.push_back(pt);
  }
  sort(a.begin(), a.end());
  int szu = 0, szd = 0;
  for (auto x : a) {
    while (szu >= 2 && cross(x, up[szu - 1], up[szu - 2]) >= 0) {
      up.pop_back();
      szu--;
    }
    while (szd >= 2 && cross(x, dw[szd - 1], dw[szd - 2]) <= 0) {
      dw.pop_back();
      szd--;
    }
    up.push_back(x);
    szu++;
    dw.push_back(x);
    szd++;
  }
  if (up[0].x == up[1].x) {
    reverse(up.begin(), up.end());
    up.pop_back();
    reverse(up.begin(), up.end());
  }
  if (dw[szd - 1].x == dw[szd - 2].x) {
    dw.pop_back();
  }
}
pair<Point, int> factory[N], exposition[N];
long long ans[N], f[N << 2];
inline void update(int i, int x, int n) {
  while (i <= n) {
    f[i] += x;
    i += i & (-i);
  }
}
inline long long query(int i) {
  long long ret = 0;
  while (i) {
    ret += f[i];
    i &= (i - 1);
  }
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int k, n, q;
  cin >> k >> n >> q;
  vector<Point> v(k);
  for (auto &a : v) {
    cin >> a.x >> a.y;
  }
  for (int i = 0; i < n; i++) {
    cin >> factory[i].first.x;
    cin >> factory[i].first.y;
    cin >> factory[i].second;
  }
  for (int i = 0; i < q; i++) {
    cin >> exposition[i].first.x;
    cin >> exposition[i].first.y;
    cin >> exposition[i].second;
  }
  memset(ans, 0, sizeof(ans));
  vector<Point> up, dw;
  get(k, v, up, dw);
  for (int i = 0; i + 1 < up.size(); i++) {
    int j = i + 1;
    long long dx = up[j].x - up[i].x;
    long long dy = up[j].y - up[i].y;
    vector<long long> allx, ally;
    for (int k = 0; k < n; k++) {
      long long x = factory[k].first.x;
      long long y = factory[k].first.y;
      y = y * dx - x * dy;
      allx.push_back(x);
      ally.push_back(y);
    }
    for (int k = 0; k < q; k++) {
      long long x = exposition[k].first.x;
      long long y = exposition[k].first.y;
      long long t = exposition[k].second;
      long long x1 = x + t * up[i].x;
      if (i) x1++;
      long long x2 = x + t * up[j].x;
      long long yy = (y + t * up[i].y) * dx - (x + t * up[i].x) * dy;
      allx.push_back(x1);
      allx.push_back(x2);
      ally.push_back(yy);
    }
    sort(allx.begin(), allx.end());
    sort(ally.begin(), ally.end());
    allx.resize(unique(allx.begin(), allx.end()) - allx.begin());
    ally.resize(unique(ally.begin(), ally.end()) - ally.begin());
    vector<Event> events;
    for (int k = 0; k < n; k++) {
      long long x = factory[k].first.x;
      long long y = factory[k].first.y;
      y = y * dx - x * dy;
      x = lower_bound(allx.begin(), allx.end(), x) - allx.begin();
      x++;
      y = lower_bound(ally.begin(), ally.end(), y) - ally.begin();
      y++;
      events.push_back(Event(x, 0, y, factory[k].second, -1));
    }
    for (int k = 0; k < q; k++) {
      long long x = exposition[k].first.x;
      long long y = exposition[k].first.y;
      long long t = exposition[k].second;
      long long x1 = x + t * up[i].x;
      if (i) x1++;
      long long x2 = x + t * up[j].x;
      long long yy = (y + t * up[i].y) * dx - (x + t * up[i].x) * dy;
      x1 = lower_bound(allx.begin(), allx.end(), x1) - allx.begin();
      x1++;
      x2 = lower_bound(allx.begin(), allx.end(), x2) - allx.begin();
      x2++;
      yy = lower_bound(ally.begin(), ally.end(), yy) - ally.begin();
      yy++;
      events.push_back(Event(x1, -1, yy, -1, k));
      events.push_back(Event(x2, 1, yy, 1, k));
    }
    sort(events.begin(), events.end());
    memset(f, 0, sizeof(f));
    int sz = ally.size();
    for (auto e : events) {
      if (e.type == 0) {
        update(e.y, e.val, sz);
      } else {
        long long tmp = query(e.y);
        if (e.val == -1) tmp = -tmp;
        ans[e.i] += tmp;
      }
    }
  }
  for (int i = 0; i + 1 < dw.size(); i++) {
    int j = i + 1;
    long long dx = dw[j].x - dw[i].x;
    long long dy = dw[j].y - dw[i].y;
    vector<long long> allx, ally;
    for (int k = 0; k < n; k++) {
      long long x = factory[k].first.x;
      long long y = factory[k].first.y;
      y = y * dx - x * dy;
      allx.push_back(x);
      ally.push_back(y);
    }
    for (int k = 0; k < q; k++) {
      long long x = exposition[k].first.x;
      long long y = exposition[k].first.y;
      long long t = exposition[k].second;
      long long x1 = x + t * dw[i].x;
      if (i) x1++;
      long long x2 = x + t * dw[j].x;
      long long yy = (y + t * dw[i].y) * dx - (x + t * dw[i].x) * dy - 1;
      allx.push_back(x1);
      allx.push_back(x2);
      ally.push_back(yy);
    }
    sort(allx.begin(), allx.end());
    sort(ally.begin(), ally.end());
    allx.resize(unique(allx.begin(), allx.end()) - allx.begin());
    ally.resize(unique(ally.begin(), ally.end()) - ally.begin());
    vector<Event> events;
    for (int k = 0; k < n; k++) {
      long long x = factory[k].first.x;
      long long y = factory[k].first.y;
      y = y * dx - x * dy;
      x = lower_bound(allx.begin(), allx.end(), x) - allx.begin();
      x++;
      y = lower_bound(ally.begin(), ally.end(), y) - ally.begin();
      y++;
      events.push_back(Event(x, 0, y, factory[k].second, -1));
    }
    for (int k = 0; k < q; k++) {
      long long x = exposition[k].first.x;
      long long y = exposition[k].first.y;
      long long t = exposition[k].second;
      long long x1 = x + t * dw[i].x;
      if (i) x1++;
      long long x2 = x + t * dw[j].x;
      long long yy = (y + t * dw[i].y) * dx - (x + t * dw[i].x) * dy - 1;
      x1 = lower_bound(allx.begin(), allx.end(), x1) - allx.begin();
      x1++;
      x2 = lower_bound(allx.begin(), allx.end(), x2) - allx.begin();
      x2++;
      yy = lower_bound(ally.begin(), ally.end(), yy) - ally.begin();
      yy++;
      events.push_back(Event(x1, -1, yy, 1, k));
      events.push_back(Event(x2, 1, yy, -1, k));
    }
    sort(events.begin(), events.end());
    memset(f, 0, sizeof(f));
    int sz = ally.size();
    for (auto e : events) {
      if (e.type == 0) {
        update(e.y, e.val, sz);
      } else {
        long long tmp = query(e.y);
        if (e.val == -1) tmp = -tmp;
        ans[e.i] += tmp;
      }
    }
  }
  for (int i = 0; i < q; i++) {
    cout << ans[i] << '\n';
  }
  return 0;
}
