#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <numeric>

int main()
{
    std::ifstream inp("scores.dat");
    std::vector<int> scores;
    std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
              std::back_inserter(scores));
    auto minmax(std::minmax_element(std::begin(scores), std::end(scores)));
    int excellent(0), satisfactory(0), normal(0), needImprovement(0);
    double average = std::accumulate(std::begin(scores), std::end(scores), 0,
                                     [&](int x, int y)
                                     {        if (y < 50) ++needImprovement;
                                         else if (y < 80) ++normal;
                                         else if (y < 95) ++satisfactory;
                                         else             ++excellent;
                                         return x + y; });
    average /= scores.size();
    std::cout << "Maximum score is: " << *(minmax.second) << "\n" <<
                 "Minimum score is: " << *(minmax.first) << "\n" <<
                 "Average score is: " << average << "\n" <<
                 "There is:\n" << excellent << " Excellent scores\n" <<
                 satisfactory << " Satisfactory scores\n" << normal <<
                 " Normal scores\n" << needImprovement << " Needs improvement!";
}