Faits: Faits: A. A.a A._ et sa soeur, B._, sont copropriétaires à raison d'une moitié chacun de la parcelle n° ... de la commune de W._, sur laquelle est construit notamment un immeuble comportant un local commercial et plusieurs appartements. Ce bâtiment était assuré auprès de Y._ contre les risques d'incendie et de dégâts d'eau à concurrence de 1 050 000 fr., valeur à neuf, jusqu'à 75 000 fr. pour les frais de déblaiement au premier risque et jusqu'à 75 000 fr. pour la perte du revenu locatif durant un an. Le 22 avril 1999, un incendie a causé d'importants dommages à l'immeuble en question. Des travaux de rénovation avaient été interrompus avant cet événement. Le jour même, A._ a téléphoné à Y._ pour annoncer le sinistre. Avec l'accord du copropriétaire, la compagnie d'assurances a fait appel à X._ SA (ci-après: X._) pour procéder aux premières mesures urgentes. Le 27 avril 1999, A._, C._, employé de X._, E._, exploitant d'une entreprise d'électricité, F._, employé de Y._, et D._, architecte indépendant mandaté par l'assureur, se sont réunis sur les lieux du sinistre afin de constater les dégâts et d'évaluer les travaux de réfection. A cette occasion, F._ a signalé à A._ qu'il pouvait mettre en oeuvre les entreprises de son choix. L'architecte, l'employé de Y._ et le copropriétaire ont invité X._ à établir un devis. A la même date, A._ a rempli une déclaration de sinistre. Sous la rubrique «Qui effectuera la réparation», il a indiqué «X._». A.b Par la suite, d'autres réunions ont eu lieu à W._ en présence notamment de A._ et de D._. Lors de la deuxième rencontre, le copropriétaire a accepté que X._ procède aux travaux de réfection, car il avait été satisfait de l'exécution des travaux d'urgence. Il a toutefois refusé de signer une déclaration datée du 24 avril 1999, selon laquelle, d'une part, il chargeait X._ des travaux de nettoyage, déblaiement et réfection à la suite de l'incendie et, d'autre part, autorisait l'assureur à payer l'entreprise de rénovation directement. A._ a participé à chaque rendez-vous sur place avec D._ et le représentant de X._. Tous les matins, il ouvrait le chantier aux ouvriers de l'entreprise de rénovation. Il n'a jamais invité le contremaître ni les ouvriers à cesser les travaux. Entre avril et juin 1999, X._ a établi plusieurs devis pour un montant total de 106 023 fr.65. Ces documents étaient rédigés à l'adresse de A._; ils étaient également envoyés à Y._. Lors des réunions de chantier, chaque poste des devis a été discuté de manière exhaustive par A._, C._ et D._; ce dernier devait limiter les travaux à la réfection du dommage consécutif à l'incendie. Les copropriétaires ne se sont pas opposés à l'appréciation du dommage effectuée par l'architecte; au contraire, A._ a participé à son évaluation. A.c Les travaux de remise en état étaient terminés pour l'essentiel à fin juin 1999. Ils se sont achevés le 20 octobre 1999, date de la dernière facture. X._ a établi cinq factures d'un montant total de 72 475 fr., soit: - facture du 24 juin 1999 de 27 000 fr. concernant les travaux de déblaiement et de nettoyage; - facture du 11 mai 1999 de 12 480 fr. concernant les travaux de maçonnerie et de peinture; - facture du 8 juillet 1999 de 13 000 fr. concernant les travaux de menuiserie; - facture du 27 juillet 1999 de 645 fr. concernant des travaux sur des cadres de fenêtres; - facture du 20 octobre 1999 de 19 350 fr. concernant des travaux d'électricité. Après avoir constaté que les montants facturés jusqu'alors correspondaient aux devis qu'il avait corrigés, D._ a arrêté définitivement à 72 990 fr. le coût des travaux rendus nécessaires par le sinistre. Son rapport du 4 août 1999 a été remis à A._, qui ne l'a pas contesté et n'a pas réclamé un autre avis. Selon l'architecte, les travaux de réfection ont été correctement exécutés par X._. Le 19 août 1999, A._ s'est opposé derechef à ce que l'assureur règle directement les factures de X._. A la demande du copropriétaire, Y._ a versé aux assurés, le 24 septembre 1999, le montant de 50 000 fr. à titre d'avance sur indemnité; cette somme a été affectée au paiement des intérêts hypothécaires et de factures des services industriels. A la requête de A._, Me G._, huissier judiciaire, a établi un constat de l'état de l'immeuble en date du 12 novembre 1999. Il a relevé notamment des traces de suie et des coulées noirâtres à plusieurs endroits, deux poignées de porte sales, des taches sur les moquettes du studio et d'un appartement du deuxième étage ainsi que divers petits défauts. Il n'a pas précisé si ces dommages avaient été causés par l'incendie, ni s'ils apparaissaient dans des pièces où X._ était intervenue. Par courrier du 16 novembre 1999, X._ a mis A._ en demeure de payer le montant de 72 475 fr. Le copropriétaire a refusé, affirmant n'avoir pas mis en oeuvre l'entreprise; il se plaignait par ailleurs de l'inachèvement des travaux et se prévalait du procès-verbal de constat du 12 novembre 1999. Sur réquisition de X._, A._ s'est vu notifier le 16 février 2000 un commandement de payer le montant de 72 475 fr. plus intérêts à 6% dès le 16 novembre 1999. Le poursuivi a formé opposition. A.d Le 24 novembre 1999, A._ a réclamé à Y._ le paiement d'un montant de 128 088 fr., après déduction de l'acompte de 50 000 fr. Cette somme comprenait notamment les frais de remise en état selon devis par 106 023 fr.65, des pertes de loyer par 37 065 fr. et des frais de remplacement de poutres par 20 000 fr. La compagnie d'assurances a rappelé au copropriétaire que les frais de remise en état avaient été arrêtés par l'architecte à 72 990 fr.; elle lui a fait remarquer que certains postes, prévus dans les premiers devis d'un montant total de 106 023 fr.25, avaient été supprimés car ils ne correspondaient pas à des travaux de réfection. Y._ a indiqué par ailleurs à A._ que le remplacement de la poutre était sans rapport avec le sinistre; en ce qui concerne la perte de loyers, elle a invité les bailleurs à lui faire parvenir les contrats les liant aux locataires à l'époque de l'incendie. Le 29 mars 2000, A._ a prétendu au paiement d'un montant de 242 232 fr.80, dont notamment 133 023 fr.55 pour les frais de remise en état et de déblaiement et 52 125 fr. à titre de perte de loyers. Le 19 janvier 2001, il a augmenté ce dernier poste à 78 400 fr. Le 17 avril 2001, Y._ s'est plainte de n'avoir pas reçu les documents justifiant les prétentions en indemnisation de la perte de loyers. En réponse, A._ a invoqué un préjudice total de 308 977 fr.80. Constatant que les prétentions des preneurs d'assurance augmentaient au gré des courriers, Y._ a attiré l'attention de A._ sur les art. 39 et 40 LCA; elle lui a rappelé pour le surplus que le coût de remise en état de l'immeuble avait été fixé à 72 990 fr. Le 26 août 2001, l'assureur a mis A._ et B._ en demeure de justifier leurs prétentions, faute de quoi celles-ci seraient considérées comme volontairement excessives. Par courrier du 19 septembre 2001, A._ a porté ses prétentions à 324 182 fr.80. Pour sa part, B._ s'est référée à cette lettre. Invoquant l'art. 40 LCA, Y._ s'est départie du contrat en date du 29 octobre 2001 et a réclamé aux preneurs d'assurance la restitution de l'avance de 50 000 fr. Auparavant, en date du 28 mai 2001, A._ et B._ avaient annulé les polices d'assurance relatives au bâtiment et à la responsabilité civile pour immeuble, ce que Y._ avait accepté avec effet au 30 septembre 2001, respectivement au 31 décembre 2001. Auparavant, en date du 28 mai 2001, A._ et B._ avaient annulé les polices d'assurance relatives au bâtiment et à la responsabilité civile pour immeuble, ce que Y._ avait accepté avec effet au 30 septembre 2001, respectivement au 31 décembre 2001. B. Par demande du 20 juin 2000, X._ a assigné A._ et B._ en paiement de la somme de 72 475 fr. à concurrence de la moitié chacun, avec intérêts à 5% dès le 16 novembre 1999. Elle a conclu en outre à ce que la poursuite dirigée contre A._ aille sa voie. Contestant avoir passé un contrat avec la demanderesse, les défendeurs ont conclu principalement au déboutement de X._. Se fondant à titre subsidiaire sur les dispositions du mandat, ils ont réclamé à la demanderesse la réparation du préjudice qu'ils estimaient avoir subi du fait de son intervention, ainsi que la réduction de sa facture à 50 000 fr. Par ailleurs, les défendeurs ont appelé en cause Y._, concluant à ce que cette dernière soit condamnée à les relever et les garantir de toute condamnation envers X._. Y._ a proposé le déboutement des défendeurs des fins de leur appel en cause. Elle a formé néanmoins une demande reconventionnelle tendant à ce que A._ et B._ soient condamnés à lui verser le montant de 50 000 fr., plus intérêts à 5% dès le 24 septembre 1999. Par jugement du 24 mai 2002, le Tribunal de première instance du canton de Genève a admis l'appel en cause de Y._. Par jugement du 10 septembre 2003, le même tribunal a condamné A._ et B._ à payer chacun à X._ 36 237 fr.50 avec intérêts à 5% dès le 16 novembre 1999; il a dit par ailleurs que la poursuite dirigée contre A._ irait sa voie jusqu'à due concurrence. Les parties ont été déboutées de toutes autres conclusions. Les défendeurs ont interjeté appel de ce jugement. L'appelée en cause a formé appel incident. Par arrêt du 18 juin 2004, la Chambre civile de la Cour de justice du canton de Genève a annulé le jugement de première instance et statué à nouveau dans les termes suivants: «Condamne A._ à payer à X._ SA la somme de 36 237 fr.50, avec intérêts à 5% l'an dès le 16 novembre 1999. Déclare non fondée, à due concurrence, l'opposition formée par A._ le 16 février 2000 au commandement de payer dans la poursuite n° ... F. Condamne B._ à payer à X._ SA la somme de 36 237 fr.50, avec intérêts à 5% l'an dès le 16 novembre 1999. Condamne Y._ à relever et garantir A._ et B._ à concurrence de 22 475 fr., avec intérêts à 5% dès le 16 novembre 1999, de leur condamnation à payer à X._ SA le montant total de 72 475 fr. avec intérêts. Condamne A._ et B._ aux dépens de la demande principale de première instance et à ceux de l'appel principal, à raison d'une moitié chacun, lesquels comprennent dans leur totalité une unique indemnité de procédure de 10 000 fr. qui constitue une participation aux honoraires de l'avocat de X._ SA. Condamne Y._ aux dépens de la demande d'appel en cause et de la demande reconventionnelle en première instance et à ceux de l'appel incident, lesquels comprennent une indemnité de procédure pour la première instance de 2500 fr. à titre de participation aux honoraires de l'avocat de B._. Compense les dépens pour le surplus. Déboute les parties de toutes autres conclusions.» Déboute les parties de toutes autres conclusions.» C. A._ et B._ forment un recours de droit public, tendant à l'annulation de l'arrêt du 18 juin 2004. X._ conclut à l'irrecevabilité du recours, subsidiairement à son rejet. Y._ a pris les mêmes conclusions. Invitée à se déterminer sur le recours, la cour cantonale s'est référée aux considérants de sa décision. A._ et B._ ont également interjeté un recours en réforme contre l'arrêt du 18 juin 2004. 