#include <bits/stdc++.h>
using namespace std;

static char M[1010][1010];

bool sol(int n,int m,int a,int b)
{
  if(m==1){
    if(a>0||b>n/2){
      return 0;
    }
    for(int i=0;i<b;i++){
      M[2*i][0]='^';
      M[2*i+1][0]='v';
    }
    return 1;
  }
  int G=0,cc;
  if(m%2==1){
    G=(n%2);
    int c=min(b,n/2);
    cc=c;
    for(int i=0;i<c;i++){
      M[2*i][m-1]='^';
      M[2*i+1][m-1]='v';
    }
    b-=c;
    m--;
  }
  int k=(b+m-1)/m,c=b-(k-1)*m;
  if(2*k>n)return 0;
  for(int i=0;i<k;i++){
    for(int j=0;j<(i==k-1?c:m);j++){
      M[2*i][j]='^';
      M[2*i+1][j]='v';
    }
  }
  G=(G+(m-c)%2)/2;
  int L=(n-2*k)*(m/2)+2*((m-c)/2)+G;
  if(L<a)return 0;
  int t=min(a,2*((m-c)/2)+G);
  for(int i=0;i<t;i++){
    M[2*k-2+(i%2)][c+2*(i/2)]='<';
    M[2*k-2+(i%2)][c+2*(i/2)+1]='>';
  }
  if(G==1&&t==2*((m-c)/2)+G){
    M[2*k-2][m-1]='<';
    M[2*k-2][m]='>';
    int l=max(0,cc-(k-1));
    for(int i=0;i<l;i++){
      M[2*k-1+2*i][m]='^';
      M[2*k-1+2*i+1][m]='v';
    }
  }
  a-=t;
  for(int i=0;i<a;i++){
    int l=i/(m/2),s=i%(m/2);
    M[2*k+l][2*s]='<';
    M[2*k+l][2*s+1]='>';
  }
  return 1;
}

int main()
{
  int n,m,a,b;
  scanf("%d%d%d%d",&n,&m,&a,&b);
  for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      M[i][j]='.';
    }
  }
  bool F=sol(n,m,a,b);
  if(!F){
    puts("NO");
  }
  else{
    puts("YES");
    for(int i=0;i<n;i++){
      for(int j=0;j<m;j++){
	putchar(M[i][j]);
      }
      putchar('\n');
    }
  }
  return 0;
}
