lcd.clear is'nt working well

I connected to my board lcd screen and a rfid scanner(MFRC522) I want that when i scan the tag that registered in the code on the lcd there will be text "Welcome" and then clear it but when i do it its only adding a weird symbol after "Welcome" and the same on unregistered tags...

#include <RFID.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN);

const int rs = 1, en = 8, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int led1 = 7;
int led2 = 6;
int power = 8;
int serNum[5];
int cards[][5] = {
  { 104, 102, 176, 121, 199
  }
};

bool access = false;

void setup() {

  lcd.begin(16, 2);
  Serial.begin(9600);
  SPI.begin();
  rfid.init();

  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);

  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);

}

void loop() {

  if (rfid.isCard()) {

    if (rfid.readCardSerial()) {
      Serial.print(rfid.serNum[0]);
      Serial.print(" ");
      Serial.print(rfid.serNum[1]);
      Serial.print(" ");
      Serial.print(rfid.serNum[2]);
      Serial.print(" ");
      Serial.print(rfid.serNum[3]);
      Serial.print(" ");
      Serial.print(rfid.serNum[4]);
      Serial.println("");
      for (int x = 0; x < sizeof(cards); x++) {
        for (int i = 0; i < sizeof(rfid.serNum); i++ ) {
          if (rfid.serNum[i] != cards[x][i]) {

            access = false;
            break;

          } else {

            access = true;

          }

        }
        if (access) break;
      }

    }

    if (access) {

      digitalWrite(led1, HIGH);
      delay(1000);
      digitalWrite(led1, LOW);
      lcd.print("Welcome");
      delay(2500);
      lcd.clear();

    } else {
      digitalWrite(led2, HIGH);
      delay(1000);
      digitalWrite(led2, LOW);
      lcd.print("Tag not registered");
      delay(2500);
      lcd.clear();

    }

  }

  rfid.halt();

}