#include <bits/stdc++.h>
using namespace std;
const int M=1e9+7;
#define rep(i,a,b) for(int i = a; i < b; i++)
#define fr(a,b) for(int i = a; i < b; i++)
#define all(x) (x).begin(),(x).end()
#define ll long long int
void rotate(vector<vector<int>>& v) {
rep(i,0,4){
rep(j,0,4) swap(v[i][j],v[j][i]);
}
rep(i,0,4) reverse(all(v[i]));
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
vector<vector<int>> x(4,vector<int> (4,0)),y(4,vector<int> (4,0)),z(4,vector<int> (4,0));
rep(i,0,4){
rep(j,0,4){
char ch;cin>>ch;
if(ch=='#') x[i][j]=1;
else x[i][j]=0;
}
}
rep(i,0,4){
rep(j,0,4){
char ch;cin>>ch;
if(ch=='#') y[i][j]=1;
else y[i][j]=0;
}
}
rep(i,0,4){
rep(j,0,4){
char ch;cin>>ch;
if(ch=='#') z[i][j]=1;
else z[i][j]=0;
}
}
// rotate(x);
// rep(i,0,4){
// rep(j,0,4) cout<<x[i][j];
// cout<<endl;
// }
string ans="No";
for(int ct1=0;ct1<4;ct1++){
vector<vector<int>> temp=x;
rotate(y);
int ct=1;
rep(i,0,4){
rep(j,0,4){
temp[i][j]+=y[i][j];
if(temp[i][j]>1){ct=0;break;}
}
if(ct==0) break;
}
if(ct==0) continue;
for(int ct2=0;ct2<4;ct2++){
rotate(z);
int ct=1;
rep(i,0,4){
rep(j,0,4){
temp[i][j]+=z[i][j];
if(temp[i][j]>1){ct=0;break;}
}
if(ct==0) break;
}
if(ct==0) continue;
rep(i,0,4){
rep(j,0,4){
// temp[i][j]+=z[i][j];
if(temp[i][j]!=1){ct=0;break;}
}
if(ct==0) break;
}
if(ct){ans="Yes";break;}
}
if(ans=="Yes") break;
}
cout<<ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKY29uc3QgaW50IE09MWU5Kzc7CgojZGVmaW5lIHJlcChpLGEsYikgZm9yKGludCBpID0gYTsgaSA8IGI7IGkrKykKI2RlZmluZSBmcihhLGIpIGZvcihpbnQgaSA9IGE7IGkgPCBiOyBpKyspCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCh4KS5lbmQoKQojZGVmaW5lIGxsIGxvbmcgbG9uZyBpbnQKCnZvaWQgcm90YXRlKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIHYpIHsKICAgIHJlcChpLDAsNCl7CiAgICAgICAgcmVwKGosMCw0KSBzd2FwKHZbaV1bal0sdltqXVtpXSk7CiAgICB9CiAgICByZXAoaSwwLDQpIHJldmVyc2UoYWxsKHZbaV0pKTsKfQoKaW50IG1haW4oKSB7CiAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogIGNpbi50aWUoMCk7CgogIHZlY3Rvcjx2ZWN0b3I8aW50Pj4geCg0LHZlY3RvcjxpbnQ+ICg0LDApKSx5KDQsdmVjdG9yPGludD4gKDQsMCkpLHooNCx2ZWN0b3I8aW50PiAoNCwwKSk7CiAgcmVwKGksMCw0KXsKICAgIHJlcChqLDAsNCl7CiAgICAgICAgY2hhciBjaDtjaW4+PmNoOwogICAgICAgIGlmKGNoPT0nIycpIHhbaV1bal09MTsKICAgICAgICBlbHNlIHhbaV1bal09MDsKICAgIH0KICB9CiAgcmVwKGksMCw0KXsKICAgIHJlcChqLDAsNCl7CiAgICAgICAgY2hhciBjaDtjaW4+PmNoOwogICAgICAgIGlmKGNoPT0nIycpIHlbaV1bal09MTsKICAgICAgICBlbHNlIHlbaV1bal09MDsKICAgIH0KICB9CiAgcmVwKGksMCw0KXsKICAgIHJlcChqLDAsNCl7CiAgICAgICAgY2hhciBjaDtjaW4+PmNoOwogICAgICAgIGlmKGNoPT0nIycpIHpbaV1bal09MTsKICAgICAgICBlbHNlIHpbaV1bal09MDsKICAgIH0KICB9CiAgLy8gcm90YXRlKHgpOwogIC8vIHJlcChpLDAsNCl7CiAgLy8gICByZXAoaiwwLDQpIGNvdXQ8PHhbaV1bal07CiAgLy8gICBjb3V0PDxlbmRsOwogIC8vIH0KICBzdHJpbmcgYW5zPSJObyI7CiAgZm9yKGludCBjdDE9MDtjdDE8NDtjdDErKyl7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHRlbXA9eDsKICAgIHJvdGF0ZSh5KTsKICAgIGludCBjdD0xOwogICAgcmVwKGksMCw0KXsKICAgICAgICByZXAoaiwwLDQpewogICAgICAgICAgICB0ZW1wW2ldW2pdKz15W2ldW2pdOwogICAgICAgICAgICBpZih0ZW1wW2ldW2pdPjEpe2N0PTA7YnJlYWs7fQogICAgICAgIH0KICAgICAgICBpZihjdD09MCkgYnJlYWs7CiAgICB9CiAgICBpZihjdD09MCkgY29udGludWU7CiAgICBmb3IoaW50IGN0Mj0wO2N0Mjw0O2N0MisrKXsKICAgICAgICByb3RhdGUoeik7CiAgICAgICAgaW50IGN0PTE7CiAgICAgICAgcmVwKGksMCw0KXsKICAgICAgICAgICAgcmVwKGosMCw0KXsKICAgICAgICAgICAgICAgIHRlbXBbaV1bal0rPXpbaV1bal07CiAgICAgICAgICAgICAgICBpZih0ZW1wW2ldW2pdPjEpe2N0PTA7YnJlYWs7fQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGN0PT0wKSBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYoY3Q9PTApIGNvbnRpbnVlOwogICAgICAgIHJlcChpLDAsNCl7CiAgICAgICAgICAgIHJlcChqLDAsNCl7CiAgICAgICAgICAgICAgICAvLyB0ZW1wW2ldW2pdKz16W2ldW2pdOwogICAgICAgICAgICAgICAgaWYodGVtcFtpXVtqXSE9MSl7Y3Q9MDticmVhazt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoY3Q9PTApIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZihjdCl7YW5zPSJZZXMiO2JyZWFrO30KICAgIH0KICAgIGlmKGFucz09IlllcyIpIGJyZWFrOwogIH0KICBjb3V0PDxhbnM7CgogIHJldHVybiAwOwp9