//#include "pch.h"
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <utility>
#include <queue>
#include <algorithm>
#include <functional>
#include <string>

#define ll long long
#define fri(n) for(i=0;i<(n);i++)
#define frj(n) for(j=0;j<(n);i++)
#define min(p,q) ((p)<(q)?(p):(q))
#define max(p,q) ((p)>(q)?(p):(q))
#define swap(p,q) r=(p);(p)=(q);(q)=r
#define INF 1000000000000000000//10^18
#define INFINT 2000000001//2*10^9+1
#define MOD 1000000007
#define PI acos(-1)

using namespace std;


int main(void)
{
	//変数の宣言
	int n,m,a,b;
	static char c[1010][1010];
	static int d[1010][1010];

	//よく使う変数
	int i,j,k,l;
	int flag=0;
	int ans=0;
	int count=0;
	int temp,temp1,temp2;
	int max,min;
	int len;
	int sum=0;
	int ok,ng;



	//データの読み込み


	scanf("%d %d %d %d",&n,&m,&a,&b);
//	scanf_s("%d %d %d %d",&n,&m,&a,&b);


/*	for(i=0;i<m;i++){
//		scanf("%d %d %d",&u,&v,&s);
		scanf_s("%d %d %d",&u,&v,&s);
	}*/

	//	printf("nは%dです\n", n);
	//	printf("データの読み込み終了\n");
	//実際の処理

	if(n*m<2*(a+b)){
		printf("NO");
		return 0;
	}

	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			c[i][j]='.';
			d[i][j]=0;
		}
	}

	if(m==1){
		if(a==0&&b<=n/2){
			printf("YES\n");
			for(i=0;i<n;i++){
				if(i<2*b&&i%2==0){
					printf("^\n");
				}else if(i<2*b&&i%2==1){
					printf("v\n");
				}else{
					printf(".\n");
				}
			}
		}else{
			printf("NO\n");
		}
		return 0;
	}
	if(n==1){
		if(b==0&&a<=m/2){
			printf("YES\n");
			for(i=0;i<m;i++){
				if(i<2*a&&i%2==0){
					printf("<");
				}else if(i<2*a&&i%2==1){
					printf(">");
				}else{
					printf(".");
				}
			}
			printf("\n");
		}else{
			printf("NO\n");
		}
		return 0;
	}

	temp1=0;
	temp2=0;
	if(n%2==1&&m%2==1){
		if(((m+1)/2+a)%2==0){
			c[0][0]='<';
			c[0][1]='>';
			c[0][2]='^';
			c[1][2]='v';
			c[1][0]='^';
			c[2][0]='v';
			c[2][1]='<';
			c[2][2]='>';
			d[0][0]=1;
			d[0][1]=1;
			d[0][2]=1;
			d[1][2]=1;
			d[1][0]=2;
			d[2][0]=2;
			d[2][1]=2;
			d[2][2]=2;
			temp1=2;
			temp2=2;
		}else{
			d[0][0]=-1;
		}
		for(i=0;(2*i+2)<m;i++){
			if(d[0][2*i+1]==0){
				c[0][2*i+1]='<';
				c[0][2*i+2]='>';
				temp1++;
				d[0][2*i+1]=temp1;
				d[0][2*i+2]=temp1;
			}
		}
		for(i=0;(2*i+2)<n;i++){
			if(d[2*i+1][0]==0){
				c[2*i+1][0]='^';
				c[2*i+2][0]='v';
				temp2++;
				d[2*i+1][0]=temp2;
				d[2*i+2][0]=temp2;
			}
		}
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(d[i][j]==0){
					if(temp1<a&&d[i][j+1]==0&&j+1<m){
						c[i][j]='<';
						c[i][j+1]='>';
						temp1++;
						d[i][j]=temp1;
						d[i][j+1]=temp1;
						if(i+1<n&&temp1<a){
							c[i+1][j]='<';
							c[i+1][j+1]='>';
							temp1++;
							d[i+1][j]=temp1;
							d[i+1][j+1]=temp1;
						}
					}else if(temp2<b&&d[i+1][j]==0&&i+1<n){
						c[i][j]='^';
						c[i+1][j]='v';
						temp2++;
						d[i][j]=temp2;
						d[i+1][j]=temp2;
						if(j+1<m&&temp2<b){
							c[i][j+1]='^';
							c[i+1][j+1]='v';
							temp2++;
							d[i][j+1]=temp2;
							d[i+1][j+1]=temp2;
						}
					}
				}
			}
		}
	}else if(n%2==1){
		for(i=0;i<m/2;i++){
			c[0][2*i]='<';
			c[0][2*i+1]='>';
			temp1++;
			d[0][2*i]=temp1;
			d[0][2*i+1]=temp1;
		}
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(d[i][j]==0){
					if(temp1<a&&d[i][j+1]==0&&j+1<m){
						c[i][j]='<';
						c[i][j+1]='>';
						temp1++;
						d[i][j]=temp1;
						d[i][j+1]=temp1;
						if(i+1<n&&temp1<a){
							c[i+1][j]='<';
							c[i+1][j+1]='>';
							temp1++;
							d[i+1][j]=temp1;
							d[i+1][j+1]=temp1;
						}
					}else if(temp2<b&&d[i+1][j]==0&&i+1<n){
						c[i][j]='^';
						c[i+1][j]='v';
						temp2++;
						d[i][j]=temp2;
						d[i+1][j]=temp2;
						if(j+1<m&&temp2<b){
							c[i][j+1]='^';
							c[i+1][j+1]='v';
							temp2++;
							d[i][j+1]=temp2;
							d[i+1][j+1]=temp2;
						}
					}
				}
			}
		}
	}else if(m%2==1){
		for(i=0;i<n/2;i++){
			c[2*i][0]='^';
			c[2*i+1][0]='v';
			temp2++;
			d[2*i][0]=temp2;
			d[2*i+1][0]=temp2;
		}
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(d[i][j]==0){
					if(temp1<a&&d[i][j+1]==0&&j+1<m){
						c[i][j]='<';
						c[i][j+1]='>';
						temp1++;
						d[i][j]=temp1;
						d[i][j+1]=temp1;
						if(i+1<n&&temp1<a){
							c[i+1][j]='<';
							c[i+1][j+1]='>';
							temp1++;
							d[i+1][j]=temp1;
							d[i+1][j+1]=temp1;
						}
					}else if(temp2<b&&d[i+1][j]==0&&i+1<n){
						c[i][j]='^';
						c[i+1][j]='v';
						temp2++;
						d[i][j]=temp2;
						d[i+1][j]=temp2;
						if(j+1<m&&temp2<b){
							c[i][j+1]='^';
							c[i+1][j+1]='v';
							temp2++;
							d[i][j+1]=temp2;
							d[i+1][j+1]=temp2;
						}
					}
				}
			}
		}
	}else{
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(d[i][j]==0){
					if(temp1<a&&d[i][j+1]==0&&j+1<m){
						c[i][j]='<';
						c[i][j+1]='>';
						temp1++;
						d[i][j]=temp1;
						d[i][j+1]=temp1;
						if(i+1<n&&temp1<a){
							c[i+1][j]='<';
							c[i+1][j+1]='>';
							temp1++;
							d[i+1][j]=temp1;
							d[i+1][j+1]=temp1;
						}
					}else if(temp2<b&&d[i+1][j]==0&&i+1<n){
						c[i][j]='^';
						c[i+1][j]='v';
						temp2++;
						d[i][j]=temp2;
						d[i+1][j]=temp2;
						if(j+1<m&&temp2<b){
							c[i][j+1]='^';
							c[i+1][j+1]='v';
							temp2++;
							d[i][j+1]=temp2;
							d[i+1][j+1]=temp2;
						}
					}
				}
			}
		}
	}

	if(temp1<a||temp2<b){
		printf("NO\n");
		return 0;
	}else{
		printf("YES\n");
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if((c[i][j]=='^'||c[i][j]=='v')&&d[i][j]<=b){
					printf("%c",c[i][j]);
				}else if((c[i][j]=='<'||c[i][j]=='>')&&d[i][j]<=a){
					printf("%c",c[i][j]);
				}else{
					printf(".");
				}
			}
			printf("\n");
		}
	}

	//	printf("計算部分終了\n");

	//出力
	

	//printf("%lld",ans);
	

	//	printf("結果の出力終了\n");


	return 0;
}



Measured memory_bytes: 6144