#include <bits/stdc++.h>
long long max(long long a, long long b) { return a > b ? a : b; }
int main() {
  static long long dp_[10], dq_[10], *dp = dp_, *dq = dq_, *tmp;
  long long x;
  int n, i;
  scanf("%d", &n);
  memset(dp, -1, 10 * sizeof *dp);
  dp[0] = 0;
  while (n--) {
    int k;
    long long d11, d12, d13, d21, d31, d;
    scanf("%d", &k);
    d11 = d12 = d13 = 0, d21 = 0, d31 = 0;
    for (i = 0; i < k; i++) {
      int c, d;
      scanf("%d%d", &c, &d);
      if (c == 1) {
        if (d11 < d)
          d13 = d12, d12 = d11, d11 = d;
        else if (d12 < d)
          d13 = d12, d12 = d;
        else if (d13 < d)
          d13 = d;
      } else if (c == 2) {
        if (d21 < d) d21 = d;
      } else {
        if (d31 < d) d31 = d;
      }
    }
    memset(dq, -1, 10 * sizeof *dq);
    for (i = 0; i < 10; i++) {
      if (dp[i] < 0) continue;
      if (dq[i] < dp[i]) dq[i] = dp[i];
      if (k >= 1) {
        if (i + 1 < 10) {
          d = max(d11, max(d21, d31));
          if (dq[i + 1] < (x = dp[i] + d)) dq[i + 1] = x;
        } else {
          d = max(d11, max(d21, d31)) * 2;
          if (dq[(i + 1) % 10] < (x = dp[i] + d)) dq[(i + 1) % 10] = x;
        }
      }
      if (k >= 2 && d11 > 0 && (d12 > 0 || d21 > 0)) {
        if (i + 2 < 10) {
          d = d11 + max(d12, d21);
          if (dq[i + 2] < (x = dp[i] + d)) dq[i + 2] = x;
        } else {
          d = max(d11 * 2 + d12, d11 + d21 + max(d11, d21)) * 2;
          if (dq[(i + 2) % 10] < (x = dp[i] + d)) dq[(i + 2) % 10] = x;
        }
      }
      if (k >= 3 && d13 > 0) {
        if (i + 3 < 10) {
          d = d11 + d12 + d13;
          if (dq[i + 3] < (x = dp[i] + d)) dq[i + 3] = x;
        } else {
          d = d11 * 2 + d12 + d13;
          if (dq[(i + 3) % 10] < (x = dp[i] + d)) dq[(i + 3) % 10] = x;
        }
      }
    }
    tmp = dp, dp = dq, dq = tmp;
  }
  x = 0;
  for (i = 0; i < 10; i++)
    if (x < dp[i]) x = dp[i];
  printf("%lld\n", x);
  return 0;
}
