#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <string>
#include <functional>
#include <set>
#define DB cerr<<"D"<<endl
#define pb push_back
using namespace std; using ll=long long; using ld=long double; const int INF=1e9; const ll LINF=1e18; const double dINF = 1e18; const ld ldINF = 1e18; const double EPS = 1e-6;
template<typename T, typename U, typename O> void caut(T a, U b, O c){cout<<"("<<a<<","<<b<<","<<c<<") ";} template<typename T, typename U> void caut(T a, U b){cout<<"("<<a<<","<<b<<") ";} template<typename T> void caut(T a){cout<<"("<<a<<") ";}
using P=pair<double,int>;
const ll M = 998244353;
void add(ll& x, ll y) {x+=y; x%=M;}
void chmax(ll& x, ll y) {if (x<y) x=y;}

int main() {
  int n,m; cin>>n>>m;
  int a,b; cin>>a>>b; swap(a,b); // 間違えた
  string s[n]; for(int i=0;i<n;i++) s[i].assign(m,'.');
  if (n%2==0&&m%2==0) {
    for(int i=0;i<n;i+=2) {
      for(int j=0;j<m;j+=2) {
        if (a==1) {
          s[i][j]='^'; s[i+1][j]='v'; a=0;
        } else if (b==1) {
          s[i][j]='<'; s[i][j+1]='>'; b=0;
        }
        else if (a>=2) {
          s[i][j]='^'; s[i][j+1]='^';
          s[i+1][j]='v'; s[i+1][j+1]='v';
          a-=2;
        } else if (b>=2) {
          s[i][j]='<'; s[i][j+1]='>';
          s[i+1][j]='<'; s[i+1][j+1]='>';
          b-=2;
        }
      }
    }
    if (a>0||b>0) {
      cout<<"NO"<<endl;
      return 0;
    }
  } else if (n%2==0&&m%2==1) {
    for(int i=0;i<n;i+=2) {
      if (a==0) break;
      s[i][m-1]='^'; s[i+1][m-1]='v'; a--;
    }
    for(int i=0;i<n;i+=2) {
      for(int j=0;j<m-1;j+=2) {
        if (a==1) {
          s[i][j]='^'; s[i+1][j]='v'; a=0;
        } else if (b==1) {
          s[i][j]='<'; s[i][j+1]='>'; b=0;
        }
        else if (a>=2) {
          s[i][j]='^'; s[i][j+1]='^';
          s[i+1][j]='v'; s[i+1][j+1]='v';
          a-=2;
        } else if (b>=2) {
          s[i][j]='<'; s[i][j+1]='>';
          s[i+1][j]='<'; s[i+1][j+1]='>';
          b-=2;
        }
      }
    }
    if (a>0||b>0) {
      cout<<"NO"<<endl;
      return 0;
    }
  } else if (n%2==1&&m%2==0) {
    for(int j=0;j<m;j+=2) {
      if (b==0) break;
      s[n-1][j]='<'; s[n-1][j+1]='>'; b--;
    }
    for(int i=0;i<n-1;i+=2) {
      for(int j=0;j<m;j+=2) {
        if (a==1) {
          s[i][j]='^'; s[i+1][j]='v'; a=0;
        } else if (b==1) {
          s[i][j]='<'; s[i][j+1]='>'; b=0;
        }
        else if (a>=2) {
          s[i][j]='^'; s[i][j+1]='^';
          s[i+1][j]='v'; s[i+1][j+1]='v';
          a-=2;
        } else if (b>=2) {
          s[i][j]='<'; s[i][j+1]='>';
          s[i+1][j]='<'; s[i+1][j+1]='>';
          b-=2;
        }
      }
    }
    if (a>0||b>0) {
      cout<<"NO"<<endl;
      return 0;
    }
  } else {
    int ba = a, bb = b;
    bool ok = true;
    {
      for(int i=0;i<n-1;i+=2) {
        if (a==0) break;
        s[i][m-1]='^'; s[i+1][m-1]='v'; a--;
      }
      for(int j=0;j<m-1;j+=2) {
        if (b==0) break;
        s[n-1][j]='<'; s[n-1][j+1]='>'; b--;
      }
      for(int i=0;i<n-1;i+=2) {
        for(int j=0;j<m-1;j+=2) {
          if (a==1) {
            s[i][j]='^'; s[i+1][j]='v'; a=0;
          } else if (b==1) {
            s[i][j]='<'; s[i][j+1]='>'; b=0;
          }
          else if (a>=2) {
            s[i][j]='^'; s[i][j+1]='^';
            s[i+1][j]='v'; s[i+1][j+1]='v';
            a-=2;
          } else if (b>=2) {
            s[i][j]='<'; s[i][j+1]='>';
            s[i+1][j]='<'; s[i+1][j+1]='>';
            b-=2;
          }
        }
      }
      if (a>0||b>0) {
        ok = false;
      }
    }

    if (!ok) {
      a = ba, b = bb;
      for(int i=0;i<n;i++) s[i].assign(m,'.');

      if (a>0) {
        s[n-3][m-3]='^'; s[n-2][m-3]='v'; a--;
      }
      if (a>0) {
        s[n-2][m-1]='^'; s[n-1][m-1]='v'; a--;
      }
      if (b>0) {
        s[n-3][m-2]='<'; s[n-3][m-1]='>'; b--;
      }
      if (b>0) {
        s[n-1][m-3]='<'; s[n-1][m-2]='>'; b--;
      }

      for(int i=0;i<n-3;i+=2) {
        if (a==0) break;
        s[i][m-1]='^'; s[i+1][m-1]='v'; a--;
      }
      for(int j=0;j<m-3;j+=2) {
        if (b==0) break;
        s[n-1][j]='<'; s[n-1][j+1]='>'; b--;
      }
      for(int i=0;i<n-1;i+=2) {
        for(int j=0;j<m-1;j+=2) {
          if (i+2 >= n-1 && j+2 >= m-1) continue;
          if (a==1) {
            s[i][j]='^'; s[i+1][j]='v'; a=0;
          } else if (b==1) {
            s[i][j]='<'; s[i][j+1]='>'; b=0;
          }
          else if (a>=2) {
            s[i][j]='^'; s[i][j+1]='^';
            s[i+1][j]='v'; s[i+1][j+1]='v';
            a-=2;
          } else if (b>=2) {
            s[i][j]='<'; s[i][j+1]='>';
            s[i+1][j]='<'; s[i+1][j+1]='>';
            b-=2;
          }
        }
      }

      if (a>0||b>0) {
        cout<<"NO"<<endl;
        return 0;
      }
    }
  }
  cout<<"YES"<<endl;
  for(int i=0;i<n;i++) {
    cout<<s[i]<<endl;
  }
}

Measured memory_bytes: 2304