#include using namespace std; #define int long long const int inf = 1e18; int n; struct gand { int x,y,val; }; gand a[200005]; int max_pxpy[200005]; int max_pxmy[200005]; int max_mxpy[200005]; int max_mxmy[200005]; int max_px[200005]; int max_py[200005]; int max_mx[200005]; int max_my[200005]; void prec() { for (int i = 1; i <= 200000; i++) max_pxpy[i] = max_pxmy[i] = max_mxpy[i] = max_mxmy[i] = max_px[i] = max_py[i] = max_mx[i] = max_my[i] = -inf; for (int i = 1; i <= n; i++) { int vl = a[i].val,x = a[i].x,y = a[i].y; max_pxpy[vl] = max(max_pxpy[vl],x + y); max_pxmy[vl] = max(max_pxmy[vl],x - y); max_mxpy[vl] = max(max_mxpy[vl],-x + y); max_mxmy[vl] = max(max_mxmy[vl],-x - y); max_px[vl] = max(max_px[vl],x); max_py[vl] = max(max_py[vl],y); max_mx[vl] = max(max_mx[vl],-x); max_my[vl] = max(max_my[vl],-y); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y >> a[i].val; prec(); int t; cin >> t; while (t--) { int m; cin >> m; vectorv(m + 1); vector>dp(m + 1); for (int i = 1; i <= m; i++) cin >> v[i]; for (int i = 1; i <= m; i++) dp[i].resize(5); dp[1][0] = 0; dp[1][1] = max_pxpy[v[1]]; dp[1][2] = max_pxmy[v[1]]; dp[1][3] = max_mxpy[v[1]]; dp[1][4] = max_mxmy[v[1]]; //cout << dp[1][0] << ' ' << dp[1][1] << ' ' << dp[1][2] << ' ' << dp[1][3] << ' ' << dp[1][4] << '\n'; for (int i = 2; i <= m; i++) { int val0 = -inf; val0 = max(val0,dp[i - 1][1] + max_mxmy[v[i]]); val0 = max(val0,dp[i - 1][2] + max_mxpy[v[i]]); val0 = max(val0,dp[i - 1][3] + max_pxmy[v[i]]); val0 = max(val0,dp[i - 1][4] + max_pxpy[v[i]]); dp[i][0] = val0; int val1 = -inf; val1 = max(val1,dp[i - 1][1]); val1 = max(val1,dp[i - 1][2] + 2 * max_py[v[i]]); val1 = max(val1,dp[i - 1][3] + 2 * max_px[v[i]]); val1 = max(val1,dp[i - 1][4] + 2 * max_pxpy[v[i]]); dp[i][1] = val1; int val2 = -inf; val2 = max(val2,dp[i - 1][1] + 2 * max_my[v[i]]); val2 = max(val2,dp[i - 1][2]); val2 = max(val2,dp[i - 1][3] + 2 * max_pxmy[v[i]]); val2 = max(val2,dp[i - 1][4] + 2 * max_px[v[i]]); dp[i][2] = val2; int val3 = -inf; val3 = max(val3,dp[i - 1][1] + 2 * max_mx[v[i]]); val3 = max(val3,dp[i - 1][2] + 2 * max_mxpy[v[i]]); val3 = max(val3,dp[i - 1][3]); val3 = max(val3,dp[i - 1][4] + 2 * max_py[v[i]]); dp[i][3] = val3; int val4 = -inf; val4 = max(val4,dp[i - 1][1] + 2 * max_mxmy[v[i]]); val4 = max(val4,dp[i - 1][2] + 2 * max_mx[v[i]]); val4 = max(val4,dp[i - 1][3] + 2 * max_my[v[i]]); val4 = max(val4,dp[i - 1][4]); dp[i][4] = val4; //cout << dp[i][0] << ' ' << dp[i][1] << ' ' << dp[i][2] << ' ' << dp[i][3] << ' ' << dp[i][4] << '\n'; } cout << dp[m][0] << '\n'; } return 0; }