<p>You are given an <code>m x n</code> binary matrix <code>matrix</code> and an integer <code>numSelect</code>.</p>
<p>Your goal is to select exactly <code>numSelect</code><strong>distinct </strong>columns from <code>matrix</code> such that you cover as many rows as possible.</p>
<p>A row is considered <strong>covered</strong> if all the <code>1</code>'s in that row are also part of a column that you have selected. If a row does not have any <code>1</code>s, it is also considered covered.</p>
<p>More formally, let us consider <code>selected = {c<sub>1</sub>, c<sub>2</sub>, ...., c<sub>numSelect</sub>}</code> as the set of columns selected by you. A row <code>i</code> is <strong>covered</strong> by <code>selected</code> if:</p>
<ul>
<li>For each cell where <code>matrix[i][j] == 1</code>, the column <code>j</code> is in <code>selected</code>.</li>
<li>Or, no cell in row <code>i</code> has a value of <code>1</code>.</li>
</ul>
<p>Return the <strong>maximum</strong> number of rows that can be <strong>covered</strong> by a set of <code>numSelect</code> columns.</p>