1.

package acm_10130_supersale;

import java.util.Scanner;

/**
 * FWP, AusgewŠhlte Probleme aus dem ACM Programming Contest, SS10
 * Problem: acm_10130_supersale
 * Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&page=show_problem&problem=1071&Itemid=8
 *
 * @author Martin Lambeck
 * @version 1.0, 17.08.2010
 *
 * Method : dp (0/1 knapsack)
 * Status : Accepted
 * Runtime: 0.772
 */


public class Main
{
    static Scanner sc = new Scanner(System.in);

    public static void main(String... args)
    {
        int cases = sc.nextInt();

        for (int i = 0; i < cases; i++)
            testcase();
    }

    public static void testcase()
    {
        int n = sc.nextInt();
        Product[] products = new Product[n];

        for (int i = 0; i < n; i++)
        {
            products[i] = new Product(sc.nextInt(), sc.nextInt());
        }

        int[] people = new int[sc.nextInt()];

        for (int i = 0; i < people.length; i++)
        {
            people[i] = sc.nextInt();
        }

        int max = 0;

        for (int w : people)
            if (w > max)
                max = w;
       
        int[] ks = knapsack(products, max);

       
        int sum = 0;
       
        for (int w : people)
        {
            int z = w;
           
            while ((z > 0) && (ks[z] == 0))
                z--;
           
            sum += ks[z];
        }
       
        System.out.println(sum);
    }

   
    static int[] knapsack (Product[] prd, int max)
    {
        int[] ks = new int[max+1];

        for (Product p : prd)
        {
            for (int j = max; j >= 0; j--)
            {
                int nw = j + p.weight;
               
                if ((nw <= max) && ((ks[j]+p.price) > ks[nw]))
                    ks[nw] = ks[j]+p.price;
            }
        }
       
        return ks;
    }
}

class Product
{
    int price = 0;
    int weight = 0;

    public Product (int p, int w)
    {
        price = p;
        weight = w;
    }
}