#include <string>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define repn(i,x) for(int i=1;i<=x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
int n,h[100005];
ll dp[100005];
#define ALL(v)  (v).begin(),(v).end()
std::set<int> st;
//#define MAX(a,b) if(a>b)
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))

    /*  ペア関連
    //vector<pair<long long, long long> > pairs(N);
    for(long long i=0; i<N; i++){
        long long a, b;
        cin >> a >> b;
        pairs[i] = make_pair(a, b);
    }
    
    //sort(pairs.begin(), pairs.end(),greater<pair<int,int> >());
	sort(pairs.begin(), pairs.end());
    */

 	//stack<int> sta;   
    //queue<int> que;


int main(){
	
	long long N,M,K,A,B,C,D;
	
	string s;
    
	std::cin >> N;
    //std::cin >> N >> M;
    //std::cin >> N >> M >> K;
    std::cin >> A >> B >> C >> D;
	//std::vector<long long> v(N);
	//std::vector<long long> w(N);
    std::cin >> s;
    
    
    // 配列入力
    /*
    for(long long i=0; i<N; i++){
		std::cin >> v[i];
	}
	*/
	/*
	for(long long i=0; i<N; i++){
		std::cin >> w[i];
	}
	*/
    
    long long sum,sum1;
	sum=0;
	sum1=0;
	int flg,flg1,flg2,cnt,cnt1;
	flg=0;
	flg1=0;
	flg2=0;
	cnt=0;
	cnt1=0;
	long long max;
	int max1;
	max=0;
	max1=0;
	int min;
	int min1;
	min=INF;
	min1=INF;

	int work1,work2,work3,work4;
	work1=0;
	work2=0;
	work3=0;
	work4=0;
	
	//通常
	
    for(long long i=0; i<N; i++){
		if(s[i]=='.'){
			cnt++;
			if(cnt>=3 && i<D && B-1<i){
				flg2=1;
				break;
			}
		}
		else{
			cnt=0;
		}
	}
	
	
	if(C>D && (s[D-2]=='#' || s[D]=='#') && flg2==0){
		puts("No");
		return 0;
	}
	

	//文字列入力
	long long s_pos,f_pos;
	s_pos=A;
	f_pos=B;
	
	
	for(long long i=B-1; i<N; i++){
		
		if(i+1==D || i+2==D){
			break;
		}
		if(s[i+1]=='.'){
			f_pos++;
		}
		else if(s[i+1]=='#' && s[i+2]=='.'){
			f_pos++;
			f_pos++;
		}
		else{
			flg=1;
		}
			
		
	}
	

	for(long long i=A-1; i<N; i++){
		
		if(i+1==C || i+2==C){
			break;
		}
		if(s[i+1]=='.' && s[i+2]!='D'){
			s_pos++;
		}
		else if(s[i+1]=='#' && s[i+2]=='.'){
			s_pos++;
			s_pos++;
		}
		else{
			flg=1;
		}
			
		
	}
	
	s_pos=A;
	f_pos=B;
	
	
	for(long long i=A-1; i<N; i++){
		
		if(i+1==C || i+2==C){
			break;
		}
		if(s[i+1]=='.'){
			s_pos++;
		}
		else if(s[i+1]=='#' && s[i+2]=='.'){
			s_pos++;
			s_pos++;
		}
		else{
			flg1=1;
		}
			
		
	}
	

	for(long long i=B-1; i<N; i++){
		
		if(i+1==D || i+2==D){
			break;
		}
		if(s[i+1]=='.' && s[i+2]!='C'){
			f_pos++;
		}
		else if(s[i+1]=='#' && s[i+2]=='.'){
			f_pos++;
			f_pos++;
		}
		else{
			flg1=1;
		}
			
		
	}	
	
	//ソート
    //std::sort(v.begin(),v.end());//昇順ソート
    //std::sort(v.begin(),v.end(),std::greater<long long>());//降順ソート
    //std::sort(w.begin(),w.end());//昇順ソート
    //std::sort(w.begin(),w.end(),std::greater<long long>());//降順ソート
    /*
    
    //S.substr(i, 5);
    //S.size();
    
    for(long long i=0; i<N; i++){
		std::cin >> v[i];
		if(st.find(v[i])==st.end()){
			st.insert(v[i]);
		}
		else{
			st.erase(v[i]);
		}
	}
	*/


	/*
	int a[4];
	int value;
	value=0;
	
	a[0] = (value % 10); 
	value /= 10;// 1桁目を取り出す
	a[1] = (value % 10); 
	value /= 10;// 2桁目を取り出す
	a[2] = (value % 10); 
	value /= 10;// 3桁目を取り出す
	a[3] = (value % 10); 
	value /= 10;// 4桁目を取り出す
    work1=a[0]+10*a[1];
    work2=a[2]+10*a[3];
    */
	
	
    if(flg==0 || flg1==0){
    	//printf("%d",N);
    	//printf("%lld",N);
    	puts("Yes");
    	//printf("%d",st.size());
    	//文字列の出力
    	//std::cout << s << std::endl;
    	//printf("%.12f\n",ret);
    	//cout << sum << endl;
	}
	else{
		puts("No");
	}
	return 0;
}


Measured memory_bytes: 640