#include<bits/stdc++.h>
using namespace std;
int main(void){
	int h,w;
	int i,j,k,l;
	char em[1001][1001];
	char box[3][3];
	char joi[3]={'J','O','I'};
	bool flg1,flg2,flg3,flg4;
	int cnt,cnt1;
	int MAX=-1;
	cin>>h>>w;
	for(i=0;i<h;i++){
		for(j=0;j<w;j++){
			cin>>em[i][j];
		}
	}
	for(i=0;i<2;i++){
		for(j=0;j<2;j++){
			cin>>box[i][j];
		}
	}
	//cout<<box[0][0]<<" "<<box[0][1]<<" "<<box[1][0]<<" "<<box[1][1]<<endl;
	
	cnt=0;
	for(i=0;i<h;i++){
		for(j=0;j<w;j++){
			// cout<<i<<" "<<j<<endl;
			// cout<<em[i][j]<<endl;
			if(box[0][0]==em[i][j]){
				if(j+1<w){
					if(box[0][1]==em[i][j+1]){
						if(i+1<h){
							if(box[1][0]==em[i+1][j]){
								if(box[1][1]==em[i+1][j+1]){
									cnt++;
								}
							}
						}
					}
				}
			}
		}
		// cout<<endl;
	}
	// for(i=0;i<h;i++){
		// for(j=0;j<w;j++){
			// cout<<i<<" "<<j<<endl;
			// cout<<em[i][j]<<endl;
		// }
		// cout<<endl;
	// }
	// cout<<endl;
	MAX=max(MAX,cnt);
	for(i=0;i<h;i++){
		for(j=0;j<w;j++){
			// cout<<i<<" "<<j<<endl;
			// for(int a=0;a<h;a++){
				// for(int b=0;b<w;b++){
					// cout<<em[a][b];
				// }
				// cout<<endl;
			// }
			// cout<<endl;
			
			for(k=0;k<3;k++){
				cnt1=cnt;
				
				if(em[i][j]!=joi[k]){
					//cout<<joi[k]<<endl;
					for(l=0;l<4;l++){
						flg1=false;
						flg2=false;
						flg3=false;
						flg4=false;
						if(l==0){
							if(em[i][j]==box[1][1]){
								if(0<=j-1){
									if(em[i][j-1]==box[1][0]){
										if(0<=i-1){
											if(em[i-1][j]==box[0][1]){
												if(em[i-1][j-1]==box[0][0]){
													flg1=true;
												}
											}
										}
									}
								}
							}
							if(joi[k]==box[1][1]){
								if(0<=j-1){
									if(em[i][j-1]==box[1][0]){
										if(0<=i-1){
											if(em[i-1][j]==box[0][1]){
												if(em[i-1][j-1]==box[0][0]){
													if(flg1)	cnt1--;
													else		cnt1++;
												}
											}
										}
									}
								}
							}
							
						}
						else if(l==1){
							if(em[i][j]==box[1][0]){
								if(j+1<w){
									if(em[i][j+1]==box[1][1]){
										if(0<=i-1){
											if(em[i-1][j]==box[0][0]){
												if(em[i-1][j+1]==box[0][1]){
													flg2=true;
												}
											}
										}
									}
								}
							}
							if(joi[k]==box[1][0]){
								if(j+1<w){
									if(em[i][j+1]==box[1][1]){
										if(0<=i-1){
											if(em[i-1][j]==box[0][0]){
												if(em[i-1][j+1]==box[0][1]){
													if(flg2)	cnt1--;
													else		cnt1++;
												}
											}
										}
									}
								}
							}
						}
						else if(l==2){
							if(em[i][j]==box[0][1]){
								if(0<=j-1){
									if(em[i][j-1]==box[0][0]){
										if(i+1<h){
											if(em[i+1][j]==box[1][1]){
												if(em[i+1][j-1]==box[1][0]){
													flg3=true;
												}
											}
										}
									}
								}
							}
							if(joi[k]==box[0][1]){
								if(0<=j-1){
									if(em[i][j-1]==box[0][0]){
										if(i+1<h){
											if(em[i+1][j]==box[1][1]){
												if(em[i+1][j-1]==box[1][0]){
													if(flg3)	cnt1--;
													else		cnt1++;
												}
											}
										}
									}
								}
							}
						}
						else{
							if(em[i][j]==box[0][0]){
								if(j+1<w){
									if(em[i][j+1]==box[0][1]){
										if(i+1<h){
											if(em[i+1][j]==box[1][0]){
												if(em[i+1][j+1]==box[1][1]){
													flg4=true;
												}
											}
										}
									}
								}
							}
							if(joi[k]==box[0][0]){
								if(j+1<w){
									if(em[i][j+1]==box[0][1]){
										if(i+1<h){
											if(em[i+1][j]==box[1][0]){
												if(em[i+1][j+1]==box[1][1]){
													if(flg4)	cnt1--;
													else		cnt1++;
												}
											}
										}
									}
								}
							}
						}
					}
				}
				//cout<<cnt1<<endl;
				MAX=max(MAX,cnt1);
			}
		}
	}
	cout<<MAX<<endl;
	return 0;
}
	


Measured memory_bytes: 4080