#include <bits/stdc++.h>
#define rep(i, a, b) for(ll i = ll(a); i < ll(b); i++)
#define rer(i, a, b) for(ll i = ll(a) - 1; i >= ll(b); i--)
#define sz(v) (int)(v).size()
#define pb push_back
#define sc second
#define fr first
#define sor(v) sort(v.begin(),v.end())
#define rev(s) reverse(s.begin(),s.end())
#define lb(vec,a) lower_bound(vec.begin(),vec.end(),a)
#define ub(vec,a) upper_bound(vec.begin(),vec.end(),a)
#define uniq(vec) vec.erase(unique(vec.begin(),vec.end()),vec.end())
using namespace std;
typedef long long int ll;
typedef pair <int, int> P;

const ll MOD=1000000007;
char m[1000][1000];
int N,M,A,B;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>N>>M>>A>>B;
    rep(i,0,N){
        rep(j,0,M){
            m[i][j]='.';
        }
    }
    if(N*M%2){
        if(N*M<2*(A+B)){
            cout <<"NO"<<"\n";
            return 0;
        }
        else if(A>(M-1)*N/2||B>(N-1)*M/2){
            cout <<"NO"<<"\n";
            return 0;
        }
        else{
            if(B%2==((N-1)/2)%2){
                rep(i,0,min((N-1)/2, B)){
                    m[2*i][M-1]='^';
                    m[2*i+1][M-1]='v';
                }
                int x=max(0,B-(N-1)/2);
                int k=0,l=0;
                while(x){
                    if(l==M-1){
                        k+=2;
                        l=0;
                    }
                    m[k][l]='^';
                    m[k+1][l]='v';
                    l++;
                    x--;
                }
                rep(i,0,N){
                    rep(j,0,M){
                        if(m[i][j]=='.'&&A>0){
                            m[i][j]='<';
                            m[i][j+1]='>';
                            A--;
                        }
                    }
                }
            }
            else{
                int x=0,y=0;
                int u=B;
                rep(i,0,min(u,(N-1)/2)){
                    m[2*i+1][0]='^';
                    m[2*i+2][0]='v';
                    x++;
                    B--;
                }
                int k=0,l=2;
                while(B){
                    if(l==M){
                        k+=2;
                        l=1;
                    }
                    m[k][l]='^';
                    m[k+1][l]='v';
                    x++;
                    l++;
                    B--;
                }
                rep(i,0,N){
                    rep(j,0,M-1){
                        if(m[i][j]=='.'&&m[i][j+1]=='.'&&A>0){
                            m[i][j]='<';
                            m[i][j+1]='>';
                            y++;
                            A--;
                        }
                    }
                }
                //cout<<y<<" "<<x;
            }
        }
    }
    else{
        if(N*M<2*(A+B)){
            cout <<"NO"<<"\n";
            return 0;
        }
        else if(A>M/2*N||B>N/2*M){
            cout <<"NO"<<"\n";
            return 0;
        }
        else{
            if(A+B==N*M/2&&A%2!=(M%4+1)/2%2*N%2){
                cout <<"NO"<<"\n";
                return 0;
            }
            else{
                if(N%2){
                    int k=0,l=0;
                    while(B){
                        if(l==M){
                            k+=2;
                            l=0;
                        }
                        m[k][l]='^';
                        m[k+1][l]='v';
                        l++;
                        B--;
                    }
                    rep(i,0,N){
                        rep(j,0,M-1){
                            if(m[i][j]=='.'&&m[i][j+1]=='.'&&A>0){
                                m[i][j]='<';
                                m[i][j+1]='>';
                                A--;
                            }
                        }
                    }
                }
                else{
                    rep(j,0,M-1){
                        rep(i,0,N){
                            if(m[i][j]=='.'&&m[i][j+1]=='.'&&A>0){
                                m[i][j]='<';
                                m[i][j+1]='>';
                                A--;
                            }
                        }
                    }
                    rep(i,0,N-1){
                        rep(j,0,M){
                            if(m[i][j]=='.'&&m[i+1][j]=='.'&&B>0){
                                m[i][j]='^';
                                m[i+1][j]='v';
                                B--;
                            }
                        }
                    }
                }
            }
        }
    }
    cout<<"YES"<<"\n";
    rep(i,0,N){
        rep(j,0,M){
            if(j==M-1) cout<<m[i][j]<<"\n";
            else cout<<m[i][j];
        }
    }
}

Measured memory_bytes: 2176