#include int weight[1010]; double time[1010]; int soucetVah(int a, int b) { int min, max; int i; int soucet; min = (a < b) ? a : b; max = (a < b) ? b : a; soucet = 0; for (i = min; i <= max; i++) { soucet += weight[i]; } return(soucet); } double maximumCasu(int a, int b) { int min, max, i; double maximum; min = (a < b) ? a : b; max = (a < b) ? b : a; maximum = time[min]; for (i = min+1; i <= max; i++) { maximum = (maximum > time[i]) ? maximum : time[i]; } return(maximum); } void bridge(int load, int length, int cars) { int i, j; struct { int weight; float time; } table[1010][1010]; float opts[1010]; for (i = 0; i < cars; i++) { int speed; scanf("%d %d", &weight[i], &speed); time[i] = length * 60 / speed; } for (i = 0; i < cars; i++) { opts[i] = 1e10; for (j = 0; j <= i; j++) { int w; w = soucetVah(i, j); if (w > load) continue; table[i][j].weight = w; table[i][j].time = maximumCasu(i, j); if (j > 0 && i > 0) table[i][j].time += opts[j-1]; opts[i] = (opts[i] <= table[i][j].time) ? opts[i] : table[i][j].time; /* printf(" [%d,%d](%d %.2f)", i, j, table[i][j].weight, table[i][j].time); */ } /* printf(" opt: %.2f\n", opts[i]); */ } printf("%.1f\n", opts[cars-1]); } int main(void) { int load, length, cars; do { scanf("%d %d %d", &load, &length, &cars); if (load == 0 && length == 0 && cars == 0) break; bridge(load, length, cars); } while (1); return(0); }