#include<bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (int i=(a);i<(b);i++)
#define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define REP(i,n) for (int i=0;i<(n);i++)
#define RREP(i,n) for (int i=(n)-1;i>=0;i--)
typedef long long LL;
int N,M,A,B;
int ans[1001][1001];

bool checker(int x){
	int a=0;
	int b=(N-1)%2;
	if(a==0&&b==0){
		//cout<<x<<endl;
		if(x<A-x)return false;
		if((A-x)+2*(M/2)<x)return false;
	}else{
		if((A-x)+(M/2)<x)return false;
		if(x+(M/2)<A-x)return false;
	}
	return true;
}

bool solve(int num,int num2,int B,int mode){
		//上から
		REP(i,N){
			REP(j,M-1){
				if(i==0){
					if(num!=0&&ans[i][j]==0&&ans[i][j+1]==0){
						num--;
						ans[i][j]=1;
						ans[i][j+1]=2;
					}
				}else{
					if(ans[i-1][j]!=0&&ans[i][j]==0&&ans[i][j+1]==0){
						if(i%2==0&&num!=0){
							num--;
							ans[i][j]=1;
							ans[i][j+1]=2;
						}
						if(i%2==1&&num2!=0){
							num2--;
							ans[i][j]=1;
							ans[i][j+1]=2;
						}
					}
				}
			}
		}
	//cout<<num<<" "<<num2<<" "<<B<<" "<<mode;
	/*//出力
		REP(i,N){
			REP(j,M){
				if(ans[i][j]==0)cout<<".";
				if(ans[i][j]==1)cout<<"<";
				if(ans[i][j]==2)cout<<">";
				if(ans[i][j]==3)cout<<"^";
				if(ans[i][j]==4)cout<<"v";
			}
			cout<<endl;
		}*/
		//下から
		for(int i=N-1;i>=0;i--){
			for(int j=M-2;j>=0;j--){
				/*if(mode==1){
					if(j==M-2)continue;
				}*/
				if(i==N-1){
					if(ans[i][j]==0&&ans[i][j+1]==0){
						if(i%2==0&&num!=0){
							num--;
							ans[i][j]=1;
							ans[i][j+1]=2;
						}
						if(i%2==1&&num2!=0){
							num2--;
							ans[i][j]=1;
							ans[i][j+1]=2;
						}
					}
				}else{
					if(ans[i+1][j]!=0&&ans[i][j]==0&&ans[i][j+1]==0){
						if(i%2==0&&num!=0){
							num--;
							ans[i][j]=1;
							ans[i][j+1]=2;
						}
						if(i%2==1&&num2!=0){
							num2--;
							ans[i][j]=1;
							ans[i][j+1]=2;
						}
					}
				}
			}
		}
		REP(i,N-1){
			REP(j,M){
				if(ans[i][j]==0&&ans[i+1][j]==0&&B!=0){
					B--;
					ans[i][j]=3;
					ans[i+1][j]=4;
				}
			}
		}
	if(num==0&&num2==0&&B==0)return true;
	return false;
}

int main(){
	cin>>N>>M>>A>>B;
	int a=0;
	int b=0;
	int c=0;
	int d=0;
	REP(i,N){
		REP(j,M){
			if(i%2==0){
				if(j%2==0){
					a++;
				}else{
					b++;
				}
			}else{
				if(j%2==0){
					c++;
				}else{
					d++;
				}
			}
		}
	}
	bool check=false;
	int answer=-1;
	REP(i,A+1){
		int aa=a-i;
		int bb=b-i;
		int cc=c-(A-i);
		int dd=d-(A-i);
		if(cc<0)continue;
		if(dd<0)continue;
		if(aa<0)continue;
		if(bb<0)continue;
		if(min(aa,cc)+min(bb,dd)<B)continue;
		//cout<<"check"<<i<<endl;
		if(checker(i)==false)continue;
		answer=i;
		check=true;
	}
	if(check==false){
		cout<<"NO"<<endl;
	}else{
		cout<<"YES"<<endl;
		int num=answer;
		int num2=A-answer;
		if(solve(num,num2,B,0)==true){
		}else{
			/*REP(i,N){
				REP(j,M){
					ans[i][j]=0;
				}
			}
			ans[N-1][M-2]=1;
			ans[N-1][M-1]=2;
			//solve(num,num2-1,B,1);
			*/
		}
		/*if(num2!=0&&(N-1)%2==0&&(M-1)%2==0){
			num2--;
			ans[N-1][M-2]=1;
			ans[N-1][M-1]=2;
		}*/

		
		
		//出力
		REP(i,N){
			REP(j,M){
				if(ans[i][j]==0)cout<<".";
				if(ans[i][j]==1)cout<<"<";
				if(ans[i][j]==2)cout<<">";
				if(ans[i][j]==3)cout<<"^";
				if(ans[i][j]==4)cout<<"v";
			}
			cout<<endl;
		}
	}
	
	
	return 0;
}

Measured memory_bytes: 5120