lcd doesnt display after using another shield

Hi, I am using an Adafruit 1.8 tft display Shield with an Arduino Mega 2560, and also 2 additional shield (can bus shield and wifi shield).

Every shield has different digital slave selects and all of them work fine ,except for the LCD SHIELD

In setup, I first display something and then use the can shield. This works fine, however after using another shield, if I try AGAIN to display something it doesn’t show anything. (apparently tft doesn’t display anything if I used a shield before it, in code)

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SD.h>
#include <SPI.h>
#include <WiFi101.h>
#include <Canbus.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
#include "arduino_secrets.h"


//declarare pini CAN
#define  P_MOSI  B,2
#define P_MISO  B,3
#define P_SCK B,1
#define MCP2515_CS     L,6 // chip select can on pin 43

#define MCP2515_INT     E,4
#define LED2_HIGH     H,5
#define LED2_LOW      H,5


#define TFT_CS  49   // Chip select line for TFT display
#define TFT_RST  9  // Reset line for TFT (or see beHIGH...)
#define TFT_DC   8  // Data/command line for TFT
#define TFT_SCLK 52   // set these to be whatever pins you like!
#define TFT_MOSI 51   // set these to be whatever pins you like!  
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);


char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;

int status = WL_IDLE_STATUS;
WiFiServer server(80);
int ok;
int k = 0;


void setup() {
  WiFi.setPins(47, 7, 5);
  pinMode(9, OUTPUT);
  pinMode(47, OUTPUT); /chip select for wifi shield
  pinMode(53, OUTPUT); /physical slave select of mega, i don't use it ,but it doesn't work if i don't init it
  pinMode(43, OUTPUT);
  pinMode(49, OUTPUT);

  Serial.begin(9600); // For debug use
  digitalWrite(43, HIGH);
  digitalWrite(47, HIGH);
  digitalWrite(49, LOW);
  delay(1000);

  tft.initR(INITR_BLACKTAB);
  tft.setRotation(tft.getRotation() + 3);
  Serial.println("OK!");
  // tft.fillScreen(ST7735_BLACK);

  testdrawrects(ST77XX_RED);
  tft.setTextSize(7);
  tft.setTextColor(ST7735_BLUE);
  tft.setCursor(20, 40);
  tft.print("RTR");                                   //this part shows up on lcd
  delay(3000);
  tft.fillScreen(ST7735_BLUE);






  digitalWrite(49, HIGH);
  digitalWrite(43, LOW);
  Serial.begin(9600); // For debug use

  if (Canbus.init(CANSPEED_500))
  {
    Serial.println("CAN Init ok");


    delay(1000);
  }
  else Serial.println("Can't init CAN");



  digitalWrite(43, HIGH);
  
  digitalWrite(49, LOW);
   tft.setCursor(20, 40);
  tft.print("plm");                      //this part of the code doesn't show up on display
  digitalWrite(49, HIGH);


  


}

loop{
}

So my question is what am i doing wrong ? Why wont the lcd display something after using another shield ?