#include <bits/stdc++.h>
const int MAX_LEN = 1010;
using namespace std;
template <typename U, typename V>
string to_string(pair<U, V>);
string to_string(const string& e_) { return "\"" + e_ + "\""; }
string to_string(char e_) { return "\'" + string(1, e_) + "\'"; }
string to_string(bool e_) { return e_ ? "true" : "false"; }
template <typename T>
string to_string(T e_) {
  string s_ = "[ ";
  for (const auto& x_ : e_) s_ += to_string(x_) + " ";
  return s_ + "]";
}
template <typename U, typename V>
string to_string(pair<U, V> e_) {
  return "(" + to_string(e_.first) + ", " + to_string(e_.second) + ")";
}
void dbg_str() { ; }
template <typename U, typename... V>
void dbg_str(U u, V... v) {
  ;
  dbg_str(v...);
}
long long int n, m;
long long int ans, mn;
long long int lx, hx, wx;
struct rd {
  long long int l;
  long long int w;
  long long int h;
};
vector<rd> rooms;
vector<rd> rolls;
int main() {
  scanf("%lld", &n);
  for (int i = 0; i < n; i++) {
    scanf("%lld %lld %lld", &lx, &wx, &hx);
    rooms.push_back({lx, wx, hx});
  }
  scanf("%lld", &m);
  for (int i = 0; i < m; i++) {
    scanf("%lld %lld %lld", &lx, &wx, &hx);
    rolls.push_back({lx, wx, hx});
  }
  ans = 0;
  for (int i = 0; i < n; i++) {
    mn = 1e14;
    for (int j = 0; j < m; j++) {
      long long int totw = (rolls[j].l / rooms[i].h) * rolls[j].w;
      if (!totw) continue;
      long long int nr =
          (long long int)ceil(((double)2 * (rooms[i].l + rooms[i].w)) / totw);
      mn = min(mn, nr * rolls[j].h);
    }
    ans += mn;
  }
  printf("%lld\n", ans);
}
