#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node
{
int arriving, processing;
};
int cmp(node n1, node n2)
{
return n1.arriving < n2.arriving;
}
int main()
{
int n, k;
scanf("%d%d", &n, &k);
int hour, minute, second, i;
node nod;
vector<node> v;
for(i = 1; i <= n; i++)
{
scanf("%d:%d:%d %d", &hour, &minute, &second, &nod.processing);
if(nod.processing > 60)
{
nod.processing = 60;
}
nod.processing *= 60;
nod.arriving = hour * 3600 + minute * 60 + second;
if(nod.arriving <= 17 * 3600)
{
v.push_back(nod);
}
}
int former[110];
for(i = 1; i <= k; i++)
{
former[i] = 8 * 3600;
}
sort(v.begin(), v.end(), cmp);
i = 0;
int minindex, mintime, curtime, sum = 0, j, size = v.size();
while(1)
{
if(i == size)
{
break;
}
mintime = 10000000;
minindex = -1;
for(j = 1; j <= k; j++)
{
if(former[j] < mintime)
{
mintime = former[j];
minindex = j;
}
}
nod = v[i];
if(nod.arriving < former[minindex])
{
sum += former[minindex] - nod.arriving;
former[minindex] += nod.processing;
}
else
{
former[minindex] = nod.arriving + nod.processing;
}
i++;
}
double res = sum / (60.0 * size);
printf("%.1lf\n", res);
system("pause");
return 0;
}