/* 完全背包,且是恰好装满,求最小价值,初值 dp[0]=0,dp[i]=Max( 1<=i<=W ) 状态转移方程 dp[j]=min(dp[j],dp[j-we[i]]+va[i]) 最后只要dp[W]!=Max 就有最优解! */ import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); //Scanner cin = new Scanner(new BufferedInputStream(System.in)); int t; t = cin.nextInt(); for(int k = 1; k <= t; k++) { int E, F; int va[]; va = new int [1000005]; int we[]; we = new int [1000005]; E = cin.nextInt(); F = cin.nextInt(); int n; n = cin.nextInt(); //int kk = 1; for(int i = 1; i <= n; i++) { va[i] = cin.nextInt(); we[i] = cin.nextInt(); /* int p, w; p = cin.nextInt(); w = cin.nextInt(); for(int j = 1; j < (F - E)/ w; j++) { va[kk] = p; we[kk] = w; } */ } int dp[]; dp = new int[1000005]; dp[0] = 0; for(int i = 1; i < 1000005; i++) dp[i] = 0x1fffffff; //System.out.println(dp[4]); for(int i = 1; i <= n; i++) for(int j = we[i]; j <= F - E; j++) { if(dp[j] > dp[j - we[i]] + va[i]) dp[j] = dp[j - we[i]] + va[i]; //System.out.println(dp[j]); } if(dp[F - E] < 0x1fffffff) System.out.println("The minimum amount of money in the piggy-bank is " + dp[F - E] + "."); else System.out.println("This is impossible."); } } }