them according to distinct $t$-element subsets of $[K]$, where $W_{j, \mathcal{A}}$ denotes the segment of $W_j$ that corresponds to subset $\mathcal{A}$. We have $W_j = \bigcup_{\mathcal{A} \subset [K]: |\mathcal{A}| = t} W_{j, \mathcal{A}}$, $j \in [N]$.

Each segment is further divided into $\rho$ equal-size non-overlapping sub-segments denoted by $W_{j,\mathcal{A}}^l$, $l\in[\rho]$. The $\rho$ sub-segments of each segment are coded together using a $(P,\rho)$ linear MDS code with generator matrix $G$, giving as output $P$ coded subsegments for segment $W_{j,\mathcal{A}}$, denoted by $C_{j,\mathcal{A}}^{l}, l\in [P]$. $C_{j,\mathcal{A}}^{l}$ is a linear combination of the subsegments of the segment corresponding to subset $\mathcal{A}$, of file $W_j$. $C_{j,\mathcal{A}}^{l}$ will be stored in server $\mathrm{S}_l$, $\forall l \in [P],j\in [N]$, and $\mathcal{A}\subset [K], \vert \mathcal{A} \vert=t$. Since each sub-segment is of length $\frac{F}{\rho{K\choose t}}$, every linear combination $C_{j,\mathcal{A}}^{l}$ is of the same length; and hence, server storage capacity constraint of $M_S F=\frac{NF}{\rho}$ is met with equality.

We assume that each user knows the generator matrix of the MDS code to be able to reconstruct any coded subsegment $C_{j,\mathcal{A}}^{l}$ from the uncoded segment $W_{j,\mathcal{A}}$.

User Cache Placement
--------------------

Using the placement scheme proposed in [@maddah] for user caches, each segment of a file, $W_{j,\mathcal{A}}$, is placed into the 