#include int weight[1010]; float time[1010]; 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.0 / speed; } for (i = 0; i < cars; i++) { opts[i] = 1e10; for (j = i; j >= 0; j--) { table[i][j].weight = weight[i] + ((i > 0) ? table[i-1][j].weight : 0); if (table[i][j].weight > load) break; 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); }