Faits: Faits: A. Par jugement du 4 décembre 2003, le Tribunal correctionnel de l'arrondissement de l'Est vaudois a condamné X._, ressortissant albanais né en 1978, pour abus de la détresse, rupture de ban, blanchiment d'argent, infraction à la loi fédérale sur le séjour et l'établissement des étrangers (LSEE) et infraction grave à la loi fédérale sur les stupéfiants (LStup), à onze ans de réclusion, sous déduction de 898 jours de détention préventive, et a ordonné son expulsion à vie du territoire suisse. Par le même jugement, le tribunal a aussi condamné Y._, ressortissant albanais né en 1976, pour blanchiment d'argent, infraction à la LSEE et infraction grave à la LStup, à onze ans de réclusion, sous déduction de 898 jours de détention préventive, et l'a expulsé du territoire suisse pour quinze ans. Il ressort notamment ce qui suit de ce jugement: X._ et Y._ ont participé à un important trafic de stupéfiants dans la région de Vevey. Après avoir mélangé de l'héroïne avec des produits de coupage et l'avoir répartie en sachet de 5 grammes, ils ont revendu la drogue directement ou par l'intermédiaire de jeunes albanais recrutés en Italie. Ils ont ainsi mis sur le marché au moins 4'260 grammes d'héroïne coupée. Ils ont également acquis 50 grammes de cocaïne et en ont vendu une quinzaine de grammes; le solde a été séquestré. A une reprise au moins, X._ a profité de la situation financière précaire et de l'état de manque de la dénommée Z._ pour entretenir avec elle des relations sexuelles dans la cage d'escalier d'un immeuble, en échange de quoi il lui a remis 10 grammes d'héroïne. Il a également profité de la toxicomanie de B._ pour obtenir de celle-ci une fellation, en échange d'un rabais de 100 francs sur 5 grammes d'héroïne. En ce qui concerne les antécédents, X._ a été condamné le 28 août 1998 par le Tribunal correctionnel de Lausanne, pour infraction et contravention à la LStup, à huit mois d'emprisonnement et à cinq ans d'expulsion du territoire suisse. Il a ainsi été renvoyé dans son pays en novembre 1998. Il est revenu en Suisse un mois plus tard. Le Procureur général du canton de Genève l'a condamné le 15 décembre 1998, pour vol, dommages à la propriété, violation de domicile et rupture de ban, à quatre mois d'emprisonnement et à sept ans d'expulsion. Quant à Y._, ses casiers judiciaires suisse et italien ne comportent aucune inscription. En ce qui concerne les antécédents, X._ a été condamné le 28 août 1998 par le Tribunal correctionnel de Lausanne, pour infraction et contravention à la LStup, à huit mois d'emprisonnement et à cinq ans d'expulsion du territoire suisse. Il a ainsi été renvoyé dans son pays en novembre 1998. Il est revenu en Suisse un mois plus tard. Le Procureur général du canton de Genève l'a condamné le 15 décembre 1998, pour vol, dommages à la propriété, violation de domicile et rupture de ban, à quatre mois d'emprisonnement et à sept ans d'expulsion. Quant à Y._, ses casiers judiciaires suisse et italien ne comportent aucune inscription. B. Par arrêt du 11 mars 2004, la Cour de cassation pénale du Tribunal cantonal vaudois a rejeté le recours de X._ et a confirmé le jugement de première instance. Par le même arrêt, elle a aussi rejeté le recours de Y._. B. Par arrêt du 11 mars 2004, la Cour de cassation pénale du Tribunal cantonal vaudois a rejeté le recours de X._ et a confirmé le jugement de première instance. Par le même arrêt, elle a aussi rejeté le recours de Y._. C. X._ forme un recours de droit public et un pourvoi en nullité au Tribunal fédéral contre cet arrêt. Il conclut à son annulation et sollicite par ailleurs l'assistance judiciaire. La Cour de cassation vaudoise s'est référée à son arrêt. Le Ministère public vaudois conclut au rejet du recours de droit public en se référant à l'arrêt attaqué.