def can_host_services(servers: list, services: list) -> bool:
    """Checks if a set of servers have resources to host a group of services.

    Args:
        servers (list): List of edge servers.
        services (list): List of services that we want to accommodate inside the servers.

    Returns:
        bool: Boolean expression that tells us whether the set of servers did manage or not to host the services.
    """
    services_allocated = 0

    # Sorting services by demand (in decreasing order) to avoid resource wastage
    services = sorted(services, key=lambda service: -service.demand)

    # Checking if all services could be hosted by the list of servers
    for service in services:
        # Sorting servers according to their demand (descending)
        servers = sorted(servers, key=lambda sv: sv.capacity - sv.demand)
        for server in servers:
            if server.capacity >= server.demand + service.demand:
                server.demand += service.demand
                services_allocated += 1
                break

    # Recomputing servers' demand
    for server in servers:
        server.compute_demand()

    return len(services) == services_allocated