The NP-complete language is X. The idea is that you can start with an arbitrary NP language Y and, in polynomial time, reduce it to X.
Formally, the definition of NP-completeness is as follows: A language X is called NP-complete iff
- X ∈ NP. That is, X can't be "harder" than the "hardest NP problem," since X is itself a member of NP.
- For any Y ∈ NP, there is a polynomial-time mapping reduction from Y to X. That is, X is "at least as hard" as any problem in NP, since a polynomial-time algorithm for X gives a polynomial-time algorithm for Y. The fact that Y is polynomial-time reducible to X is sometimes denoted Y ≤p X, by the way.
That said, it is possible to reduce any NP-complete language to any other NP-complete language, so if Y polynomial-time reduces to X and X is NP-complete, it is possible (but not necessary) for Y to be NP-complete. However, it is known that if Y reduces in polynomial time to X, that Y has to be an element of NP.
Hope this helps!