finish part III: read from file