import sys

def get_best_price(start, end, cities, cities_cost):
    best_price = cities_cost[end]
    for item in cities[start]:
        if item in cities[end]:
            price = - cities[start][item] + cities[end][item] + cities_cost[end]
            # print(start, end, cities[start][item] , cities[end][item] , cities_cost[end])
            # print(price)
            best_price = max(best_price, price)
    return best_price


def main(cities, cities_cost):
    cities_cost[-1] = 0
    for starting_city in range(len(cities)-2, -1, -1):
        for ending_city in range(starting_city +1, min(len(cities), starting_city + 100)):
            cities_cost[starting_city] = max(cities_cost[starting_city], get_best_price(starting_city, ending_city, cities, cities_cost))
    # print(cities_cost)
    return cities_cost[0]



if __name__ == '__main__':

    N = int(input())
    cities = []
    for i in range(N):
        cities.append(dict())
    cities_cost = [-1] * N
    for i in range(N):
        num_cranes = int(input())
        for x in range(num_cranes):
            key, value = [int(c) for c in sys.stdin.readline().strip("\n").split()]
            # print(key, value)
            cities[i][key] = value
    # print(cities)
    # print()
    print(main(cities, cities_cost))


    # print(l)
