OI XIII - naj

// https://szkopul.edu.pl/problemset/problem/ifGPlMtR2muaLl-03rmGj6T8/site/?key=statement

#include <bits/stdc++.h>

// #define GARY_DBG
#define GARY_LIB

// constexpr int sizik = 1000 * 1001;
constexpr int N = 602;

#define ar std::array

typedef std::vector<std::vector<int>> _kra;

int trojkaty[N][N];
int S[N][N];
int przekatne[N][N];

struct Point {
    int x, y;
};
struct Cos {
    Point p;
    int w;
};

int cross(const Point& a, const Point& b, const Point& c) {
    return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}

int n, m;
int safe_add_1(int a, int b) {
    if (++a >= b) a = 0;
    return a;
}
int safe_add(int a, int b, int c) {
    if ((a + b) >= c) return a + b - c;
    return a + b;
}

void solve() {
    std::cin >> n;

    std::vector<Point> points(n);
    for (auto& [x, y] : points) {
        std::cin >> x >> y;
    }
    std::reverse(points.begin(), points.end());

    std::cin >> m;

    int total = 0;

    std::vector<Cos> cosie(m);
    for (auto& [p, w] : cosie) {
        std::cin >> p.x >> p.y >> w;
        total += w;
    }

    for (int i = 0; i < m; i++) {
        int y = 1;
        for (int x = 0; x < n; x++) {
            if (points[x].x == cosie[i].p.x && points[x].y == cosie[i].p.y) {
                continue;
            }
            if (x == y) {
                y = safe_add_1(y, n);
            }

            while (cross(points[x], points[y], cosie[i].p) > 0) {
                y = safe_add_1(y, n);
            }

            if (cross(points[x], points[y], cosie[i].p) == 0) {
                przekatne[x][y] += cosie[i].w;
            } else {
                trojkaty[x][y] += cosie[i].w;
            }
        }
    }

    for (int d = 2; d < n; d++) {
        for (int i = 0; i < n; i++) {
            int j = safe_add(i, d, n);
            int prev = safe_add(i, d - 1, n);
            S[i][j] = S[i][prev] + trojkaty[i][j] + przekatne[i][prev];
        }
    }

    int ans = INT32_MIN;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int k = j + 1; k < n; k++) {
                int wyn = total - S[i][j] - S[j][k] - S[k][i];
                ans = std::max(ans, wyn);
            }
        }
    }

    std::cout << ans << '\n';
}

int32_t main() {
#ifndef GARY_DBG
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);
#endif

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}