#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())
char f[1005][1005];
int nn,mm;
void ff(int n,int m,int a,int b,bool ff){
	assert(n%2==0 && m%2==0);
	if(!ff && (a+b)*2 > n*m){
		puts("NO");
		return ;
	}
	if(!ff && (a+b)*2 == n*m && a%2 == 1 && b%2 == 1){
		puts("NO");
		return ;
	}
	puts("YES");
	for(int i=0;i<n;i+=2){
		for(int j=0;j<m;j+=2){
			if(a>0){
				f[i][j] = '<';
				f[i][j+1] = '>';
				a--;
				if(ff || a){
					f[i+1][j] = '<';
					f[i+1][j+1] = '>';
					a--;
				}
			}
			else if(b>0){
				f[i][j] = '^';
				f[i+1][j] = 'v';
				b--;
				if(ff || b){
					f[i][j+1] = '^';
					f[i+1][j+1] = 'v';
					b--;
				}
			}
		}
	}
	if(ff){
		for(int a=nn-3;a<nn;a++)for(int b=mm-3;b<mm;b++)f[a][b]='.';
		f[nn-3][mm-3] = '<'; f[nn-3][mm-2] = '>';
		f[nn-3][mm-1] = '^'; f[nn-2][mm-1] = 'v';
		f[nn-1][mm-1] = '>'; f[nn-1][mm-2] = '<';
		f[nn-1][mm-3] = 'v'; f[nn-2][mm-3] = '^';
	}
	//assert(!a&&!b);
	rep(i,nn){
		rep(j,mm){
			 printf("%c",f[i][j]);
		}
		puts("");
	}
}
int main(){
	int n,m,a,b;
	cin>>n>>m>>a>>b; nn=n,mm=m;
	rep(aa,nn)rep(bb,mm)f[aa][bb]='.';
	if(n%2 == 0 && m%2 == 0){
		ff(n,m,a,b,0);
	}
	else if(n%2 == 0 && m%2 == 1){
		for(int i=0;i<n&&b;i+=2){
			f[i][m-1] = '^';
			f[i+1][m-1] = 'v';
			b--;
		}
		ff(n,m-1,a,b,0);
	}
	else if(n%2 == 1 && m%2 == 0){
		for(int i=0;i<m&&a;i+=2){
			f[n-1][i] = '<';
			f[n-1][i+1] = '>';
			a--;
		}
		ff(n-1,m,a,b,0);
	}
	else{
		if(n*m-1 < (a+b)*2){
			puts("NO"); return 0;
		}
		bool flag = 0;
		if(n*m-1 == (a+b)*2 && b>=(n-1)/2 && a>=(m-1)/2 && (b-(n-1)/2)%2 == 1){
			for(int i=0;i<n-3&&b;i+=2){
    			f[i][m-1] = '^';
    			f[i+1][m-1] = 'v';
    			b--;
    		}
    		for(int i=0;i<m-3&&a;i+=2){
    			f[n-1][i] = '<';
    			f[n-1][i+1] = '>';
    			a--;
    		}
    		f[nn-3][mm-3] = '<'; f[nn-3][mm-2] = '>';
    		f[nn-3][mm-1] = '^'; f[nn-2][mm-1] = 'v';
    		f[nn-1][mm-1] = '>'; f[nn-1][mm-2] = '<';
    		f[nn-1][mm-3] = 'v'; f[nn-2][mm-3] = '^';
    		a-=2; b-=2;
    		for(int i=0;i<n-1;i+=2){
    		    for(int j=0;j<m-1;j+=2){
    		        if(i==n-3 && j==m-3) continue;
    		        if(a){
    		            f[i][j] = '<';
        				f[i][j+1] = '>';
        				a--;
        				f[i+1][j] = '<';
        				f[i+1][j+1] = '>';
        				a--;
    		        }
    		        else{
    		            f[i][j] = '^';
        				f[i+1][j] = 'v';
        				b--;
        				f[i][j+1] = '^';
        				f[i+1][j+1] = 'v';
        				b--;
        			}
    		    }
    		}puts("YES");
    		rep(i,nn){
		        rep(j,mm){
    			    printf("%c",f[i][j]);
    		    }
        		puts("");
        	}
    		return 0;
		}
		for(int i=0;i<n-1&&b;i+=2){
			f[i][m-1] = '^';
			f[i+1][m-1] = 'v';
			b--;
		}
		for(int i=0;i<m-1&&a;i+=2){
			f[n-1][i] = '<';
			f[n-1][i+1] = '>';
			a--;
		}
		ff(n-1,m-1,a,b,flag);
	}
}


Measured memory_bytes: 2176