#include <stdio.h> #define INF ( (1 << 30) - 1 ) #define MAX_KINDS_COINS 500 #define MAX_WEIGHT 10000 int emptyWeight, filledWeight; int weightLimit; int kindsOfCoins; int value[MAX_KINDS_COINS + 1]; int weight[MAX_KINDS_COINS + 1]; int minValue[MAX_WEIGHT + 1]; int main(){ int testCases; scanf("%d", &testCases); while (testCases--){ scanf("%d%d", &emptyWeight, &filledWeight); scanf("%d", &kindsOfCoins); int coin; for (coin = 1; coin <= kindsOfCoins; coin++) scanf("%d%d", &value[coin], &weight[coin]); weightLimit = filledWeight - emptyWeight; int i; for (i = 1; i <= weightLimit; i++) minValue[i] = INF; minValue[0] = 0; int preCoins, lowerWeight, totalWeight, tempValue; for (preCoins = 1; preCoins <= kindsOfCoins; preCoins++){ lowerWeight = weight[preCoins]; for (totalWeight = lowerWeight; totalWeight <= weightLimit; totalWeight++){ tempValue = minValue[totalWeight - lowerWeight] + value[preCoins]; if (tempValue < minValue[totalWeight]) minValue[totalWeight] = tempValue; } } if (minValue[weightLimit] == INF) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n", minValue[weightLimit]); } return 0; }