#include <stdio.h>  
#include <algorithm>  
#include <assert.h>
#include <bitset>
#include <cmath>  
#include <complex>  
#include <deque>  
#include <functional>  
#include <iostream>  
#include <limits.h>  
#include <map>  
#include <math.h>  
#include <queue>  
#include <set>  
#include <stdlib.h>  
#include <string.h>  
#include <string>  
#include <time.h>  
#include <unordered_map>  
#include <unordered_set>  
#include <vector>  
#define ll long long
#define rep2(i,a,b) for(ll i=a;i<=b;++i)
#define rep(i,n) for(ll i=0;i<n;i++)
#define rep3(i,a,b) for(ll i=a;i>=b;i--)
#define REP(e,v) for(auto e:v)
#define pii pair<int,int>
#define pll pair<ll,ll>
#define tii tuple<int,int,int>
#define pq priority_queue<int>
#define pqg priority_queue<int,vector<int>,greater<int>>
#define pb push_back
#define edge(v,a,b) v[a].pb(b);v[b].pb(a);
#define MAX_V 400010
#define vec vector<int>
#define vecll vector<ll>
#define vecpii vector<pii>
#define endl "\n"
#define ALL(c) (c).begin(),(c).end()
using namespace std;
int in() {int x;scanf("%d",&x);return x;}
ll lin() {ll x;scanf("%lld",&x);return x;}

#define INF 1e9+7
#define LLINF 1e18+7
ll MOD=924844033;
#define N 1055050

ll n,m,k;
ll a,b;
char mat[1100][1100];
main(){
    n=in(),m=in();
    a=in(),b=in();
    swap(a,b);
    rep(i,1050)rep(j,1050)mat[i][j]='.';
    if(n*m<2*(a+b)){cout<<"NO";return 0;}
    if(n%2==0&&m%2==0){
        if(2*(a+b)==n*m&&a%2){
            cout<<"NO\n";return 0;
        }
        cout<<"YES\n";
        rep(i,n/2)rep(j,m/2){
            if(a>1){
                a-=2;
                mat[2*i][2*j]='^';
                mat[2*i+1][2*j]='v';
                mat[2*i][2*j+1]='^';
                mat[2*i+1][2*j+1]='v';
            }
            else if(a==1){
                a=0;
                mat[2*i][2*j]='^';
                mat[2*i+1][2*j]='v';
                mat[2*i][2*j+1]='.';
                mat[2*i+1][2*j+1]='.';
            }
            else if(b>1){
                b-=2;
                mat[2*i][2*j]='<';
                mat[2*i+1][2*j]='<';
                mat[2*i][2*j+1]='>';
                mat[2*i+1][2*j+1]='>';
            }
            else if(b==1){
                b=0;
                mat[2*i][2*j]='<';
                mat[2*i+1][2*j]='.';
                mat[2*i][2*j+1]='>';
                mat[2*i+1][2*j+1]='.';
            }
        }
        rep(i,n){
            rep(j,m){
                cout<<mat[i][j];
            }
            cout<<endl;
        }
    }
    else if(n%2&&m%2){
        if(n/2*m<a||m/2*n<b){cout<<"NO";return 0;}
        if(n==1){
            cout<<"YES\n";
            rep(i,m/2){
                if(b){
                    cout<<"<>";
                    b--;
                }
                else{cout<<"..";}
            }
            cout<<".";return 0;
        }
        else if(m==1){
            cout<<"YES\n";
            rep(i,n/2){
                if(a){
                    cout<<"^\n";
                    cout<<"v\n";
                    a--;
                }
                else{cout<<".\n.\n";}
            }
            cout<<".";return 0;
        }
        else if(n*m-1!=(a+b)*2||(n/2*m^a)%2==0){
            cout<<"YES\n";
            rep(i,n/2){
                if(a){
                    a--;
                    mat[i*2][m-1]='^';
                    mat[i*2+1][m-1]='v';
                }
                else{
                    mat[i*2][m-1]=mat[i*2+1][m-1]='.';
                }
            }
            mat[n-1][m-1]='.';
            rep(j,m/2){
                if(b){
                    b--;
                    mat[n-1][j*2]='<';
                    mat[n-1][j*2+1]='>';
                }
                else{
                    mat[n-1][j*2]=mat[n-1][j*2+1]='.';
                }
            }
            rep(i,n/2)rep(j,m/2){
                if(a>1){
                    a-=2;
                    mat[2*i][2*j]='^';
                    mat[2*i+1][2*j]='v';
                    mat[2*i][2*j+1]='^';
                    mat[2*i+1][2*j+1]='v';
                }
                else if(a==1){
                    a=0;
                    mat[2*i][2*j]='^';
                    mat[2*i+1][2*j]='v';
                    mat[2*i][2*j+1]='.';
                    mat[2*i+1][2*j+1]='.';
                }
                else if(b>1){
                    b-=2;
                    mat[2*i][2*j]='<';
                    mat[2*i+1][2*j]='<';
                    mat[2*i][2*j+1]='>';
                    mat[2*i+1][2*j+1]='>';
                }
                else if(b==1){
                    b=0;
                    mat[2*i][2*j]='<';
                    mat[2*i+1][2*j]='.';
                    mat[2*i][2*j+1]='>';
                    mat[2*i+1][2*j+1]='.';
                }
            }
        }
        else{
            cout<<"YES\n";
            mat[n-3][m-3]='<';
            mat[n-3][m-2]='>';
            mat[n-3][m-1]='^';
            mat[n-2][m-1]='v';
            mat[n-1][m-1]='>';
            mat[n-1][m-2]='<';
            mat[n-1][m-3]='v';
            mat[n-2][m-3]='^';
            mat[n-2][m-2]='.';
            a-=2;b-=2;
            rep(i,n/2-1){
                if(a){
                    a--;
                    mat[i*2][m-1]='^';
                    mat[i*2+1][m-1]='v';
                }
                else{
                    mat[i*2][m-1]=mat[i*2+1][m-1]='.';
                }
            }
            rep(j,m/2-1){
                if(b){
                    b--;
                    mat[n-1][j*2]='<';
                    mat[n-1][j*2+1]='>';
                }
                else{
                    mat[n-1][j*2]=mat[n-1][j*2+1]='.';
                }
            }
            rep(i,n/2)rep(j,m/2){
                if(i==n/2-1&&j==m/2-1){
                    continue;
                }
                if(a>1){
                    a-=2;
                    mat[2*i][2*j]='^';
                    mat[2*i+1][2*j]='v';
                    mat[2*i][2*j+1]='^';
                    mat[2*i+1][2*j+1]='v';
                }
                else if(a==1){
                    a=0;
                    mat[2*i][2*j]='^';
                    mat[2*i+1][2*j]='v';
                    mat[2*i][2*j+1]='.';
                    mat[2*i+1][2*j+1]='.';
                }
                else if(b>1){
                    b-=2;
                    mat[2*i][2*j]='<';
                    mat[2*i+1][2*j]='<';
                    mat[2*i][2*j+1]='>';
                    mat[2*i+1][2*j+1]='>';
                }
                else if(b==1){
                    b--;
                    mat[2*i][2*j]='<';
                    mat[2*i+1][2*j]='.';
                    mat[2*i][2*j+1]='>';
                    mat[2*i+1][2*j+1]='.';
                }
            }
        }
        rep(i,n){
            rep(j,m){
                cout<<mat[i][j];
            }
            cout<<endl;
        }
    }
    else{
        bool flag=true;
        if(m%2){swap(a,b);swap(n,m);flag=false;}
        if(n*m==2*(a+b)){
            if(a%2){cout<<"NO";return 0;}
        }
        if(n/2*m<a){cout<<"NO";return 0;}
        cout<<"YES\n";
        rep(i,m/2){
            if(b){
                b--;
                mat[n-1][i*2]='<';
                mat[n-1][i*2+1]='>';
            }
            else mat[n-1][i*2]=mat[n-1][i*2+1]='.';
        }
        rep(i,n/2)rep(j,m/2){
                if(a>1){
                    a-=2;
                    mat[2*i][2*j]='^';
                    mat[2*i+1][2*j]='v';
                    mat[2*i][2*j+1]='^';
                    mat[2*i+1][2*j+1]='v';
                }
                else if(a==1){
                    a=0;
                    mat[2*i][2*j]='^';
                    mat[2*i+1][2*j]='v';
                    mat[2*i][2*j+1]='.';
                    mat[2*i+1][2*j+1]='.';
                }
                else if(b>1){
                    b-=2;
                    mat[2*i][2*j]='<';
                    mat[2*i+1][2*j]='<';
                    mat[2*i][2*j+1]='>';
                    mat[2*i+1][2*j+1]='>';
                }
                else if(b==1){
                    b--;
                    mat[2*i][2*j]='<';
                    mat[2*i+1][2*j]='.';
                    mat[2*i][2*j+1]='>';
                    mat[2*i+1][2*j+1]='.';
                }
            }
        if(flag){
            rep(i,n){
                rep(j,m){
                    cout<<mat[i][j];
                }
                cout<<endl;
            }
        }
        else{
            rep(j,m){
                rep(i,n){
                    if(mat[i][j]=='<')cout<<'^';
                    else if(mat[i][j]=='>')cout<<'v';
                    else if(mat[i][j]=='^')cout<<'<';
                    else if(mat[i][j]=='v')cout<<'>';
                    else cout<<mat[i][j];
                }
                cout<<endl;
            }
        }
    }
}


Measured memory_bytes: 2304