テストはしてない
for (i = 12 + 31; i >= 1 + 1; i--)
 for (m = (i >= 12+1) ? 12 : i - 1; m >= 1 && (d = i - m) <= 31; m--, c++)
  if (d <= a[m])
   printf("%d%02d%02d = %d\n", year, m, d, i + n);