#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof x)
#define For(i,a,b) for (int i=(a);i<=(b);i++)
#define Fod(i,b,a) for (int i=(b);i>=(a);i--)
#define fi first
#define se second
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define outval(x) cerr<<#x" = "<<x<<endl
#define outtag(x) cerr<<"---------------"#x"---------------"<<endl
#define outarr(a,L,R) cerr<<#a"["<<L<<".."<<R<<"] = ";\
						For(_x,L,R)cerr<<a[_x]<<" ";cerr<<endl;
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef vector <int> vi;
typedef long double LD;
LL read(){
	LL x=0,f=0;
	char ch=getchar();
	while (!isdigit(ch))
		f|=ch=='-',ch=getchar();
	while (isdigit(ch))
		x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return f?-x:x;
}
const int N=1005;
int n,m,a,b,nn,mm,aa,bb;
char g[N][N];
int retry(){
	n=nn,m=mm,a=aa,b=bb;
	if ((~n&1)||(~m&1))
		return puts("NO"),0;
	For(i,1,n)
		For(j,1,m)
			g[i][j]='.';
	if (a<2||b<2||n<3||m<3)
		return puts("NO"),0;
	g[n][m]='>';
	g[n][m-1]='<';
	g[n][m-2]='v';
	g[n-1][m-2]='^';
	g[n-2][m-2]='<';
	g[n-2][m-1]='>';
	g[n-2][m]='^';
	g[n-1][m]='v';
	a-=2,b-=2;
	if (a*2<=m-3){
		for (int i=1;i+1<=m-3&&a>0;i+=2){
			g[n][i]='<';
			g[n][i+1]='>';
			a--;
		}
		for (int i=1;i<=m&&b>0;i++)
			for (int j=1;j+1<=n&&b>0;j+=2){
				if (g[j][i]!='.'||g[j+1][i]!='.')
					continue;
				g[j][i]='^';
				g[j+1][i]='v';
				b--;
			}
	}
	else if (b*2<=n-3){
		for (int i=1;i+1<=n-3&&b>0;i+=2){
			g[i][m]='^';
			g[i+1][m]='v';
			b--;
		}
		for (int i=1;i<=n&&a>0;i++)
			for (int j=1;j+1<=m&&a>0;j+=2){
				if (g[i][j]!='.'||g[i][j+1]!='.')
					continue;
				g[i][j]='<';
				g[i][j+1]='>';
				a--;
			}
	}
	else {
		if (n&1){
			for (int i=1;i+1<=m-3&&a>0;i+=2){
				g[n][i]='<';
				g[n][i+1]='>';
				a--;
			}
			n--;
		}
		if (m&1){
			for (int i=1;i+1<=n-2&&b>0;i+=2){
				g[i][m]='^';
				g[i+1][m]='v';
				b--;
			}
			m--;
		}
		for (int i=1;i<n;i+=2)
			for (int j=1;j<m;j+=2){
				if (g[i][j]!='.')
					continue;
				if (a>1){
					g[i][j]=g[i+1][j]='<';
					g[i][j+1]=g[i+1][j+1]='>';
					a-=2;
				}
				else if (b>1){
					g[i][j]=g[i][j+1]='^';
					g[i+1][j]=g[i+1][j+1]='v';
					b-=2;
				}
				else if (a==1){
					g[i][j]='<';
					g[i][j+1]='>';
					a--;
				}
				else if (b==1){
					g[i][j]='^';
					g[i+1][j]='v';
					b--;
				}
			}
	}
	if (a||b)
		return puts("NO"),0;
	puts("YES");
	For(i,1,nn)
		puts(g[i]+1);
	return 0;
}
int main(){
	n=nn=read(),m=mm=read(),a=aa=read(),b=bb=read();
	For(i,1,n)
		For(j,1,m)
			g[i][j]='.';
	if (a*2<=m){
		for (int i=1;i+1<=m&&a>0;i+=2){
			g[n][i]='<';
			g[n][i+1]='>';
			a--;
		}
		for (int i=1;i<=m&&b>0;i++)
			for (int j=1;j+1<=n&&b>0;j+=2){
				if (g[j+1][i]!='.')
					continue;
				g[j][i]='^';
				g[j+1][i]='v';
				b--;
			}
	}
	else if (b*2<=n){
		for (int i=1;i+1<=n&&b>0;i+=2){
			g[i][m]='^';
			g[i+1][m]='v';
			b--;
		}
		for (int i=1;i<=n&&a>0;i++)
			for (int j=1;j+1<=m&&a>0;j+=2){
				if (g[i][j+1]!='.')
					continue;
				g[i][j]='<';
				g[i][j+1]='>';
				a--;
			}
	}
	else {
		if (n&1){
			for (int i=1;i+1<=m&&a>0;i+=2){
				g[n][i]='<';
				g[n][i+1]='>';
				a--;
			}
			n--;
		}
		if (m&1){
			for (int i=1;i+1<=n&&b>0;i+=2){
				g[i][m]='^';
				g[i+1][m]='v';
				b--;
			}
			m--;
		}
		for (int i=1;i<n;i+=2)
			for (int j=1;j<m;j+=2){
				if (a>1){
					g[i][j]=g[i+1][j]='<';
					g[i][j+1]=g[i+1][j+1]='>';
					a-=2;
				}
				else if (b>1){
					g[i][j]=g[i][j+1]='^';
					g[i+1][j]=g[i+1][j+1]='v';
					b-=2;
				}
				else if (a==1){
					g[i][j]='<';
					g[i][j+1]='>';
					a--;
				}
				else if (b==1){
					g[i][j]='^';
					g[i+1][j]='v';
					b--;
				}
			}
	}
	if (a>0||b>0)
		return retry();
	puts("YES");
	For(i,1,nn)
		puts(g[i]+1);
	return 0;
}

Measured memory_bytes: 2176