#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
char mp[5010][5010];
signed main(){
int n,m,k;
cin>>n>>m>>k;
int duan=n,chang=n*m;
if(duan<=k&&k<=chang&&k%2==chang%2){
for(int i=1;i<=2*n+1;i++)
for(int j=1;j<=2*m+1;j++){
if(i==1||j==1||i==2*n+1||j==2*m+1)mp[i][j]='+';
else if(i%2==0&&j%2==0)mp[i][j]='o';
else if(i%2&&j%2==0)mp[i][j]='-';else if(j%2&&i%2==0)mp[i][j]='|';
else mp[i][j]='+';
}
vector<pair<int,int>>link;
int x=1,y=1,now=1;
k--;
while(true){
int sheng=n-x+1;
link.emplace_back(x*2,y*2);
if(sheng==k+1){
x++;
while(x<=n){
link.emplace_back(x*2,y*2);
x++;
}
break;
}
y+=now;
if(now==1&&y>m)now=-1,y=m,x++;
else if(now==-1&&y<=0)now=-1,y=1,x++;
k--;
if(k<-1)throw;
}
assert(link.size());
auto[q1,q2]=link.front();
auto[p1,p2]=link.back();
q1--,p1++;mp[q1][q2]='S',mp[p1][p2]='G';
for(int i=1;i<link.size();i++){
auto[f1,f2]=link[i-1];
auto[n1,n2]=link[i];
if(f2==n2+2)mp[f1][n2+1]='.';
else if(f2==n2-2)mp[f1][n2-1]='.';
else if(f1==n1+2)mp[f1-1][n2]='.';
else mp[f1+1][n2]='.';
}
cout<<"Yes\n";
for(int i=1;i<=2*n+1;i++,cout<<'\n')
for(int j=1;j<=2*m+1;j++)cout<<mp[i][2*m-j+2];
}else cout<<"No\n";
}